交叉编译HTOP并移植到ARM嵌入式Linux系统

原创作品,允许转载,转载时请务必以超链接形式标明文章、作者信息和本声明,否则将追究法律责任。

 

  最近一直在完善基于Busybox做的ARM Linux的根文件系统,由于busybox是一个精简的指令集组成的简单文件系统,其优点就是极精简,满足了Linux基本的启动需求,由于它几乎没有什么后台服务,对于追求极度裁剪的系统开发者而言是一个非常好的体验,不过,也正是由于其精简,很多我们在开发测试中使用的工具或者库也可能都没有,这对于开发者而言也增加了一定的移植工作量,笔者最近正被各种移植工具软件和库文件深深折磨着,今天主要说一下一个比较实用的工具HTOP的移植过程。

  • htop是什么

  htop——一个可以让用户与之交互的进程查看器。作为文本模式的应用程序,主要用于控制台或X终端中。当前具有按树状方式来查看进程,支持颜色主题,可以定制等特性。

与top相比,htop有以下优点:

  1、可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。

  2、在启动上,比 top 更快。

  3、杀进程时不需要输入进程号。

  4、htop 支持鼠标操作。

  5、top 已经很老了。

 

  • htop移植 

  1、编译环境

    Host机:ubuntu-16.10(64bit)

    Target: arm

    交叉工具链:arm-linux-gnueabi-gcc

    工具包:

        ncurses-5.9.7: https://yunpan.cn/cMkkk9pDiuu7G (提取码:2488)

        htop-1.0.2:  https://yunpan.cn/cMkknBsW6T5kp (提取码:b16f)

  2、编译前准备

    下载两个压缩包,放在/home/liangwode/test目录下,解压缩两个压缩文件夹,并创建编译安装目录。

tar xvzf ncurses.tar.gz
tart xvzf htop-1.0.2.tar.gz
mkdir install_ncurses
mkdir install_htop

  

  3、编译ncurses

    由于htop依赖于ncurses库,因此需要先编译ncurses,进入ncurses目录,并配置交叉编译

cd ncurses-5.9
./configure --prefix=/home/test/install_ncurses  --host=arm-linux-gnueabi --without-cxx --without-cxx-binding --without-ada --without-manpages --without-progs --without-tests --with-shared

    

    编译并安装ncurses库

make && make install

 

    这样在/home/test/install_ncurses目录下就生成了ncurses的库和头文件等文件 

bin  include  lib  share

   

  4、编译htop

  进入htop目录,并配置htop交叉编译选项,注意需通过LDFLAGS指定ncurses库所在的目录并通过CPPFLAGS指定ncurses头文件所在的目录

cd htop-1.0.2
./configure --prefix=/home/liangwode/test/install_htop --disable-unicode --host=arm-linux-gnueabi LDFLAGS=-L/home/liangwode/test/install_ncurses/lib CPPFLAGS=-I/home/liangwode/test/install_ncurses/include/ncurses

  

  编译并安装htop

make && make install

   

完可成后可以在在/home/liangwode/test/install_htop目录下生成安装完文件。

 

  5、移植到目标机文件系统

 将ncurses编译生成的文件及htop的可执行文件移植到目标系统对应的文件夹,笔者根文件系统在sd卡,已经挂载到了/mnt/sysroot目录下

cd /home/liangwode/test/install_ncurses
cp -frP lib/* /mnt/sysroot/usr/lib/
cp -frP share/* /mnt/sysroot/usr/share/
cd /home/liangwode/test/install_htop
cp -P bin/htop /mnt/sysroot/usr/sbin/

 

  OK,将sd卡插入目标机,重启目标机系统,进入系统后,htop可用:

 

htop1  [##                                                                                          1.3%]     Tasks: 13, 0 thr; 1 running2  [#******                                                                                     6.4%]     Load average: 0.15 0.11 0.10 3  [###******                                                                                   8.8%]     Uptime: 03:41:004  [*                                                                                           0.6%]Mem[|||||||||||||||||#*                                                                    167/997MB]Swp[                                                                                           0/0MB]PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command                                                                                                                                              
10619 root       20   0  2964  1920  1540 R  6.9  0.2  0:01.43 htop                                                                                                                                                 1514 root       20   0  2828  1772  1516 S  6.3  0.2 12:41.46 htop241 root       20   0  2592  1368  1284 S  0.6  0.1  1:00.63 /bin/sh /etc/init.d/led_run
10583 root       20   0  2512  1668  1316 S  0.0  0.2  0:00.26 /usr/sbin/dropbear         1 root       20   0  2592  1380  1292 S  0.0  0.1  0:02.97 init252 root       20   0  2104  1276  1180 S  0.0  0.1  0:00.01 /usr/sbin/dropbear259 root       20   0  2592  1112  1032 S  0.0  0.1  0:00.00 /usr/sbin/telnetd264 root       20   0  2592  1284  1204 S  0.0  0.1  0:00.00 /usr/sbin/inetd268 root       20   0  2596  1460  1348 S  0.0  0.1  0:00.17 -sh294 root       20   0  4508  3484  3128 S  0.0  0.3  0:00.52 wpa_supplicant -iwlan0 -Dnl80211 -c/etc/wpa_supplicant.conf -qq367 root       20   0  2592   748   656 S  0.0  0.1  0:00.00 udhcpc -i wlan0 -S
10605 root       20   0  2596  1528  1432 S  0.0  0.1  0:00.03 -sh

 

  

   

 

后记:

  在编译的过程中,笔者测试了htop-2.0.0,htop-2.0.2版本,可能是和ncurses版本不匹配的原因,按照同样的方法编译总是失败,错误要么是找不到ncurses的库,要么找不到ncurses的头文件,最后只能放弃,选择了htop-1.0.2版本后成功编译。  

 

备注:

  如果编译ncurse报错:

gcc -DHAVE_CONFIG_H -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 --param max-inline-insns-single=1200 -c ../ncurses/lib_gen.c -o ../objects/lib_gen.o
In file included from ./curses.priv.h:325:0,
                from ../ncurses/lib_gen.c:19:
_18018.c:843:15: error: expected ‘)’ before ‘int’
../include/curses.h:1631:56: note: in definition of macro ‘mouse_trafo’
 #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
                                                        ^
Makefile:967: recipe for target '../objects/lib_gen.o' failed
make[1]: *** [../objects/lib_gen.o] Error 1
make[1]: Leaving directory '/home/abuu/project/ncurses-6.0/ncurses'
Makefile:113: recipe for target 'all' failed
make: *** [all] Error 2

 

 

请删除 删除include/curses.h中mouse_trafo所在行的注释(/*generated*/),重新make,顺利编译通过

转载于:https://www.cnblogs.com/liangwode/p/5817594.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue如何获取年月日_好程序员web前端教程分享Vue相关面试题

好程序员web前端教程分享Vue相关面试题,Vue是一套构建用户界面的渐进式框架,具有简单易用、性能好、前后端分离等优势,是web前端工程师工作的好帮手,也是企业选拔人才时考察的重点技能。接下来好程序员web前端教程资源就给大家分享…

Underscore.js (1.7.0)-函数预览

集合(Collections)(25) - each- map- reduce- reduceRight- find- filter- where- findWhere- reject- every- some- contains- invoke- pluck- max- min- sortBy- groupBy- indexBy- countBy- shuffle- sample- toArray- size- partition数组&#xff0…

react dispatch_React系列自定义Hooks很简单

React系列-Mixin、HOC、Render Props(上)React系列-轻松学会Hooks(中)React系列-自定义Hooks很简单(下)我们在第二篇文章中介绍了一些常用的hooks,接着我们继续来介绍剩下的hooks吧useReducer 作为useState 的替代方案。它接收一个形如(state, action) > newStat…

三大UML建模工具Visio、Rational Rose、PowerDesign的区别

本文源自http://developer.51cto.com/art/201006/207993.htm UML建模工具Visio 、Rational Rose、PowerDesign的比较 ROSE是直接从UML发展而诞生的设计工具,它的出现就是为了对UML建模的支持,ROSE一开始没有对数据库端建模的支持,但是在现在…

内核中的内存申请:kmalloc、vmalloc、kzalloc、get_free_pages 之间的区别

kmalloc vmalloc kzalloc get_free_page()是内核空间申请内存空间函数 malloc是用户空间申请内存函数 一 ,kmalloc() 与 kfree() 和get_free_page的区别 1,用于申请较小的、连续的物理内存:使用的是内存分配器slab一小片。申请的内存位于物理内存…

前端 保存后端传来数据的id_一篇来自前端同学对后端接口的吐槽

前言去年的某个时候就想写一篇关于接口的吐槽,当时后端提出了接口方案对于我来说调用起来非常难受,但又说不上为什么,没有论点论据所以也就作罢。最近因为写全栈的缘故,团队内部也遇到了一些关于接口设计的问题,于是开…

2018-2019-1 《信息安全系统设计基础》教学进程

《信息安全系统设计基础》教学进程 目录 考核方式暑假准备教学进程 第01周学习任务和要求第02周学习任务和要求第03周学习任务和要求第04周学习任务和要求第05周学习任务和要求第06周学习任务和要求第07周学习任务和要求第08周学习任务和要求第09周学习任务和要求第10周学习任务…

python字符串是什么_python字符串详解

字符串详解 在python中引号引起来的就是字符串 字符串是用来存储少量数据 索引 索引(下标) 通过索引可以精确的定位到某个元素 name "meat" meat 每一个字母叫做一个元素 # 0123 从左向右代表每一个字母 #-4-3-2-1 从右向左每一个字母 print(name[-1]) 输出 t name …

最小编辑代价

最小编辑代价问题: 对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。 给定两个字…

Android中的数据库

2019独角兽企业重金招聘Python工程师标准>>> 1.1. 什么时候使用数据库 有大量相似结构的数据需要存储的时候就可以使用数据库。 1.2. SQLite的简介 SQLite是一款轻量级的数据库。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它。Androi…

python计算绩效工资_python实现 --工资管理系统

原博文 2017-07-25 22:41 − # -*- coding: utf-8 -*- __author__ hjianli # import re import os info_message """Alex 100000 Rain 80000 Egon 50000 Yuan 30000 """ #序列字典 xulie_...01669 相关推荐 2019-09-28 21:13 − Python python…

为Windows Server 2012 R2指定授权服务器

为Windows Server 2012 R2指定授权服务器在Windows Server 2008 R2的终端服务中,可以手动指定授权服务器,而在Windows Server 2012 R2中,默认只能通过"远程桌面连接服务"管理器,指定授权服务器,而要使用远程…

spring5高级编程_Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新

简介是什么让java世界变得更好,程序员变得更友爱,秃头率变得不是那么的高,让程序员不必再每天996,有时间找个女朋友?是Spring。是什么让企业级java应用变得简单易懂,降低了java程序员的进入门槛&#xff0c…

关于resolve非泛型方法不能与类型实参一起使用

今天mvc新建三层时,写到bll层中一直报下面的错误,检查了几遍赶脚并没有什么错。最后发现缺少一些引用。 如下面的图,少添加了下面的两个引用.Unity是微软模式与实践团队开发的一个轻量级、可扩展的依赖注入容器, Microsoft.Practices.Unity.C…

设计模式-Singleton

2019独角兽企业重金招聘Python工程师标准>>> Singleton算是知道的设计模式中最简单的最方便实现的了,模式实现了对于类提供唯一实例的方法,在很多系统中都会用到此模式。在实际项目中使用全局变量,或者静态函数等方式也可以达到这…

dump分析工具_Java应用CPU过高,如何排查?参考解决思路和常用工具总结

本文总结了一些常见的线上应急现象和对应排查步骤和工具。分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱。毕竟作者自己也是从手忙脚乱时走过来的。只不过这里先提示一下。在线上应急过程中要记住,只有一个总体…

st官网下载stm32固件库方法

进入www.st.com官网------把网站改成中文(就在右上方)----点击产品-----选择右侧的微控制器选项------选择左侧的STM32 32位ARM CortexMCU-----选择左侧的STM32F1系列-----选择STM32103-----选择中间部分mcu对应型号(我用的是STM32F103ZE)---…

mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated

解决方法1&#xff1a;在php程序代码里面设置报警级别 <?php error_reporting E_ALL & ~E_DEPRECATED 方法2&#xff1a;禁止php报错 display_errors On 改为 display_errors Off 方法3&#xff1a;使用mysqli或者PDO 建议大家尽快取消mysql&#xff0c;全部都走…

JavaScript强化教程 —— Cocos2d-JS极速调试技巧

本文为 H5EDU 机构官方 HTML5培训 教程&#xff0c;主要介绍&#xff1a;JavaScript强化教程 —— Cocos2d-JS极速调试技巧 本文教大家一个调试Cocos2d-JS的小技巧&#xff0c;我都是这么用的&#xff0c;特意来告诉大家这个轻量快速的调试技巧。1.首先我们需要安装官方的cocos…

dos攻击命令_Kali Linux系列之拒绝服务攻击(DOS)实战(上)

(你的世界是个什么样的世界&#xff1f;你说&#xff0c;我们倾听!)-----------------小百科拒绝服务攻击即是攻击者想办法让目标机器停止提供服务&#xff0c;是黑客常用的攻击手段之一。其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分&#xff0c;只要能够对目标…