交叉编译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可用:
htop 1 [## 1.3%] Tasks: 13, 0 thr; 1 running
2 [#****** 6.4%] Load average: 0.15 0.11 0.10
3 [###****** 8.8%] Uptime: 03:41:00
4 [* 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 htop
241 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 init
252 root 20 0 2104 1276 1180 S 0.0 0.1 0:00.01 /usr/sbin/dropbear
259 root 20 0 2592 1112 1032 S 0.0 0.1 0:00.00 /usr/sbin/telnetd
264 root 20 0 2592 1284 1204 S 0.0 0.1 0:00.00 /usr/sbin/inetd
268 root 20 0 2596 1460 1348 S 0.0 0.1 0:00.17 -sh
294 root 20 0 4508 3484 3128 S 0.0 0.3 0:00.52 wpa_supplicant -iwlan0 -Dnl80211 -c/etc/wpa_supplicant.conf -qq
367 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,顺利编译通过
交叉编译HTOP并移植到ARM嵌入式Linux系统的更多相关文章
- 交叉编译VIM并移植到ARM嵌入式Linux系统
原创作品,允许转载,转载时请务必以超链接形式标明文章.作者信息和本声明,否则将追究法律责任. 众所周知,vim是vi的增强版本,实际体验要比vi好用很多,由于笔者为ARM系统制作的基于busybo ...
- Holer实现外网访问ARM嵌入式Linux系统
公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...
- 外网访问ARM嵌入式Linux系统
外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...
- 基于s5pv210嵌入式linux系统sqlite3数据库移植
基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/** ****************************************************************************** * @author 暴走的小 ...
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- ARM 开发板嵌入式linux系统与主机PC通过串口传输文件
本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...
随机推荐
- MySQL Limit 限定查询记录数
MySQL Limit 限定查询记录数 MySQL LIMIT MySQL 中 LIMIT 关键字用于限定查询记录返回最大数目. 语法: ... LIMIT offset , rows 该语法中,of ...
- Python学习笔记:sqlite3(sqlite数据库操作)
对于数据库的操作,Python中可以通过下载一些对应的三方插件和对应的数据库来实现数据库的操作,但是这样不免使得Python程序变得更加复杂了.如果只是想要使用数据库,又不想下载一些不必要的插件和辅助 ...
- 华为ensp工具栏丢失解决方法
电脑是win8系统 不知道什么原因,华为模拟器的工具栏神奇的消失了,感觉很郁闷,每次要写字的时候都找不到在哪里(菜单里也没有),于是在官方论坛里面找了一下终于找出原因了. 关闭ensp,点击属性,进入 ...
- python创建字典
创建: {x:x**2 for x in (2,4,6)} dict(xjm=110,lxh=119,pzq=120) dict([('a',1),('b',2),('c',3)])
- 可以字符串string转化成list,tuple,dict的eval()方法
功能:将字符串str当成有效的表达式来求值并返回计算结果. 语法: eval(source[, globals[, locals]]) -> value 参数: source:一个Python表 ...
- Android 渗透小知识点
客户端用于 ADB 通信的默认端口始终是 5037,设备使用从 5555 到 5585 的端口 adb devices用于显示所有已连接设备, 有时候会出现一些问题, 这时候需要使用adb kill- ...
- 原码、反码、补码、BCD码、格雷码
二进制的最高位表示这个二进制的正负符号(0为正,1为负),其余各位数表示其数值本身称为原码. 正数的反码等于原码,负数的反码是在原码的基础上,符号位不变,其余各位取反. 正数的补码等于原码,负数的补码 ...
- 批量上传图片(jQuery-File-Upload使用)
jQuery-File-Upload jQuery-File-Upload是一个jquery下的ajax文件上传插件,支持批量上传,github地址:https://github.com/blueim ...
- thinkphp3.1.3验证码优化
现状 thinkphp3.1.3版本中的验证码字符分布不均匀,在自定义宽高时很明显. 调用代码: Image::buildImageVerify(6, 5, 'png', 150, 50); 生成的验 ...
- Oracle 自增写给自己的
首先咱先建一张表: CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR(1 ...