移植前需要理解的概念

  • 『交叉编译器』:想要使程序能够在ARM板上运行,需要使用交叉编译器编译程序,如 arm-hisiv400-linux-gcc
  • 『动态链接与静态链接的区别』:ARM板上相关库文件不全,因此移植程序时选择静态链接
  • 『依赖』:可以使用 apt-file search 查找自己缺的依赖库,但依赖库也需要交叉编译、静态链接
  • 『./configure make make install』:典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤

1、./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 查看详细的说明帮助。

2、make 是用来编译的,它从Makefile中读取指令,然后编译。

这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

可能遇到的错误:make *** 没有指明目标并且找不到 makefile。问题很明了,没有Makefile,怎么办,原来是要先./configure 一下,再make。

3、make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

移植步骤

1. libmnl库的编译

ethtool 依赖于 libmnl 库,因此先对 libmnl 库进行交叉编译与静态链接。

下载 libmnl 源码

configure命令

./configure  --host=arm-linux CC=arm-hisiv400-linux-gcc  --prefix=/home/xin/Downloads/ethtool-5.15/libmnl LDFLAGS=-static
  • 「–host」:指定编译出来的二进制程序所执行的主机,这里选择 arm-linux
  • 「CC」:指定编译器,这里选择交叉编译器 arm-hisiv400-linux-gcc
  • 「–prefix」:指定文件安装路径,可以是绝对路径或者相对路径
  • 「LDFLAGS=-static」:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。这里指定静态链接 -static

可以使用 ./configure -h 查看帮助

make

make install

完成以上步骤后即可在指定目录 /home/xin/Downloads/ethtool-5.15/libmnl 下查看编译成功的文件

2. ethtool 源码的编译

下载ethtool源码

./autogen.sh

生成配置文件

./configure

./configure --prefix=/home/xin/Downloads/ethtool --host=arm-linux CC=arm-hisiv400-linux-gcc MNL_CFLAGS="-I/home/xin/Downloads/ethtool-5.15/libmnl/include" MNL_LIBS="-L/home/xin/Downloads/ethtool-5.15/libmnl/lib -lmnl" LDFLAGS=-static

make

make install

完成以上步骤后即可在指定目录 /home/xin/Downloads/ethtool 下查看编译成功的文件

遇到的问题

问题一

fatal error: libmnl/libmnl.h: No such file or directory#include <libmnl/libmnl.h>

报错的原因使找不到 <libmnl/libmnl.h> 头文件。

这里需要注意,使用 sudo apt-get install libmnl-dev 命令会安装 libmnl-dev库,/usr/include下也会有 libmnl/libmnl.h 文件,但这只有在使用gcc的时候系统能够找到,交叉编译时是找不到的。

解决方法是对 libmnl 库的源码进行交叉编译,并在编译ethtool源码的时候指定 libmnl 头文件与lib库的路径。

解决Linux系统下(交叉)编译出现“cannot find -lxxx”的错误 (ubuntu)

问题二

cannot find -lmnl

报错的原因是无法连接 libmnl 库,我这里犯的错误是对 ethtool 的编译使用了静态链接,但对 libmnl 库的编译时使用的时动态链接,libmnl 库的 lib 文件 是 .so 动态链接,因此报错了,但是 ethtool 静态链接需要找 .a 文件,故提示找不到链接。

解决方法是对 libmnl 进行静态链接,确保生成 .a 文件。

移植ethtool至ARM板相关推荐

  1. am335x mysql_移植mysql到ARM(AM335x)

    一,编译ncurses 编译mysql需要依赖ncurses,先编译ncurses 1.下载ncurses 下载路径是ftp://ftp.gnu.org/gnu/ncurses,选择下载的是ncurs ...

  2. 编译ARM平台的 QtEmbedded 的MySQL插件和移植MySQL到ARM开发板

    经过几天的努力,终于交叉编译出了arm平台所需Qt/E的MySQL插件(驱动),其中顺便把MySQL也移植到了mini2410的开发板上. 编译器:arm-linux-gcc(4.3.2) Pc平台: ...

  3. QT程序到arm板(s5pv210)的移植之旅

    前记: 由于毕设的原因,将来需要移植QT程序到arm板子运行,故有此文. 看博客寻资料,看到一位作者写道:知识来源于互联网,必将回报互联网.赞. 介于从陌生到熟悉的折腾,故将移植过程记录,发文,以己省 ...

  4. Opencv3.2移植到arm板

    注:博客中有些图片部分为了省事,借用了别人博客的图片,相关部分注意事项相同.若有侵权,请联系删除! 一,Opencv3.2移植到arm Opencv3.2 ubuntu16.04 目标板:飞凌嵌入式i ...

  5. wxX11移植到arm板上

    [原]移植wxX11到开发板上 2012-5-18阅读467 评论0 最近几天由于工作安排,要将wxX11程序移植到arm开发板上.一连工作了好几天,终于可以在板子上显示出一个"X" ...

  6. java arm_移植java到arm开发板

    1. 在主机linux上安装Oracle Java SE Embedded 下载Oracle Java SE Embedded软件包 本次使用ejdk-8u211-linux-armv6-vfp-hf ...

  7. arm qt mysql插件,关于移植QT的Sqlite数据库到ARM板运行的问题

    关于移植QT的Sqlite数据库到ARM板运行的问题 运行一般的程序我们的步骤一般是在PC主机上编译,编译成功后交叉编译,然后把程序下载到ARM开发板上,因为主机的交叉编译库和ARM开发板的运行的QT ...

  8. 最新版ser2net移植到ARM板上,交叉编译

    这个是ser2net源码http://sourceforge.net/projects/ser2net/files/latest/download ser2net是我在玩openwrt时接触的,当时用 ...

  9. Qt——用在ARM板上的Mplayer(1.3.0,1.0rc4)安装编译步骤!还有,Mplayer背景抖动闪烁问题解答,终于来了!

    注意:若转载,请贴上链接"https://blog.csdn.net/qq_41042595/article/details/112308184",如若发现抄袭或未标明来源现象,都 ...

最新文章

  1. Latex与VSCode环境搭建问题解决
  2. 原型继承+原型链 + 对象继承发展
  3. 通过ID查询一个用户的两种开发方法
  4. mysql系统服务初始化_MySql服务初始化、安装、启动
  5. nodejs服务器部署教程一
  6. 问题五十六:怎么用ray tracing画参数方程表示的曲面(3)—— b-spline surface
  7. MakeDirZ.bat
  8. mysql 递归查询所有父级
  9. 轨迹路线生成与运动插件 Curvy Spline 的使用
  10. Flash加速功能实现
  11. android 日记 app推荐,有什么写日记的软件?这4个app推荐给大家!
  12. Android如何实现全局的护眼模式
  13. 服务器改了密码 网页打不开了,为什么用户中心里的修改密码网页打不开
  14. easyExcel导出数据并设置单元格下拉数据
  15. ubuntu下使用netplan配置网络
  16. AutoCad软件界面乱码
  17. 中国移动一级业务支撑系统多Kubernetes集群PaaS平台实践经验分享
  18. 【OpenGL】使用MinGW下gcc编译OpenGL的glut和freeglut库
  19. 编写java程序计算梯形面积_【Java】编写一个应用程序计算梯形和圆形的面积。...
  20. HiveSql一天一个小技巧:如何不使用union all 进行列转行

热门文章

  1. 牛根生的“牛“,牛在哪里?
  2. Android做3D旋转动画,Android编程实现3D旋转效果实例
  3. 第1-7课:基础开胃菜
  4. Python 搭建excel数据分析环境(符Demo源码)
  5. Flutter学习之倒计时计时器
  6. windows电脑中的待机、休眠和睡眠状态的区别
  7. UVa1647 Computer Transformation
  8. 广州王师傅揭秘未来20年最有前途的行业!——不要再错过下一个风口
  9. 职业规划-Web前端开发工程师
  10. uboot引导vxworks6.9(T4240) 启动