0
点赞
收藏
分享

微信扫一扫

向开发板上移植ip工具:交叉编译 ip工具

青鸾惊鸿 1天前 阅读 1

一.  简介

前面几篇文章学习了 CAN设备节点的创建,以及如何使能 CAN驱动。

本文学习向开发板上移植ip工具。

二.  向开发板上移植ip工具:交叉编译 ip工具

注意:在移植 ip 命令的时候必须先对根文件系统做个备份!防止操作失误导致系统启动失败!切

记!!!

备份文件系统 rootfs(rootfs在 /home/wangtian/linux/nfs_File目录下):

sudo tar -cvf rootfs_2024_0324.tar.gz rootfs/

在 /home/wangtian/linux/nfs_File目录下就会生成 rootfs_2024_0324.tar.gz

1.  移植ip工具的原因

开发板加载的文件系统(即之前我使用 busybox工具制作的rootfs)中, 其实有 ip命令(即 ip工具),只是 ip命令不能操作 CAN接口。

开发板上电后,进入文件系统目录下:

运行设置 can0 的波特率的命令 "ip link set can0 type can bitrate 500000" :

可以确定,开发板上的 ip命令不能操作can0。

所以说,busybox 自带的 ip 命令并不支持对 can 的操作,因此,我们需要重新移植 ip 命令。

2. 移植ip工具

我们需要重新移植 ip 命令,也就是 iproute2

iproute2 源码下载地址为: https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/

里我们下载 4.4.0 版本的,笔者试过最新的版本,但是编译一直有问题。 4.4.0 版本的 iproute2 正点原子已经提供 ,路径为: 1 、例程源码 ->7 、第三方库源码 -> iproute2-4.4.0.tar.gz

(1)  拷贝ip工具源码包

iproute2-4.4.0.tar.gz 发送到 ubuntu 中并解压,命令如下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/tools$ cp /mnt/hgfs/Ubuntu_Shares/iproute2-4.4.0.tar.gz ./

解压缩 iproute2-4.4.0.tar.gz

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/tools$ tar -xvf iproute2-4.4.0.tar.gz 

(2) 其次,更改Makefile中编译器

解压完成以后会得到一个名为“iproute2-4.4.0”的目录,进入此目录中,打开 Makefile 并修改。在 Makefile 中找到下面这行:

CC = gcc

改为 arm-linux-gnueabihf-gcc,也就是开发板上的编译器:

CC = arm-linux-gnueabihf-gcc

(3) 编译 ip源码

Makefile 修改完成以后,直接使用 “make” 命令编译,这里编译时出错了,提示错误信息如下:

.......................
In file included from ip.c:25:0:
../include/namespace.h:36:1: 错误: 对‘setns’的静态声明出现在非静态声明之后
 {
 ^
In file included from /opt/arm_tools/gcc_linaro/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/sched.h:41:0,
                 from ../include/namespace.h:4,
                 from ip.c:25:
/opt/arm_tools/gcc_linaro/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/bits/sched.h:91:12: 附注: ‘setns’的上一个声明在此
 extern int setns (int __fd, int __nstype) __THROW;
            ^
make[1]: *** [<内置>:ip.o] 错误 1
make[1]: 离开目录“/home/wangtian/zhengdian_Linux/tools/iproute2-4.4.0/ip”
make: *** [Makefile:50:all] 错误 2

打开 namespace.h文件, 屏蔽了如下代码:

#ifndef HAVE_SETNS
static inline int setns(int fd, int nstype)
{
#ifdef __NR_setns
	return syscall(__NR_setns, fd, nstype);
#else
	errno = ENOSYS;
	return -1;
#endif
}
#endif /* HAVE_SETNS */

 

再次运行 "make"命令进行编译,又提示 :无法找到 bison工具。于是,使用命令安装bison:

sudo apt-get install bison

重新 执行"make" 命令,提示无法找到 flex命令:

flex  -oemp_ematch.lex.c emp_ematch.l
make[1]:flex:命令未找到
make[1]: *** [Makefile:169:emp_ematch.lex.c] 错误 127
make[1]: 离开目录“/home/wangtian/zhengdian_Linux/tools/iproute2-4.4.0/tc”
make: *** [Makefile:50:all] 错误 2

解决办法:安装 flex命令:

sudo apt-get install flex

这时候可以编译成功,成功后 就会在 iproute2 源码的 ip 目录下得到一个名为 “ ip ” 的命令,如下所示:

以下操作请严格按照教程步骤来!否则可能会导致系统无法启动!

接下来就是移植 ip工具,将 ip工具拷贝到开发板文件系统相关目录下,测试 ip工具是否可用。

举报

相关推荐

0 条评论