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

一.  简介

前面几篇文章学习了 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_setnsreturn syscall(__NR_setns, fd, nstype);
#elseerrno = 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工具是否可用。

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

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

相关文章

【深度学习基础(4)】pytorch 里的log_softmax, nll_loss, cross_entropy的关系

一、常用的函数有&#xff1a; log_softmax,nll_loss, cross_entropy 1.log_softmax log_softmax就是log和softmax合并在一起执行&#xff0c;log_softmaxlogsoftmax 2. nll_loss nll_loss函数全称是negative log likelihood loss, 函数表达式为&#xff1a;f(x,class)−x[…

Qt/QML编程之路:QPainter与OpenGL的共用(49)

在Qt编程中,有时会有这样一种场景:用OpenGL显示了一个3维立体图,但是想在右下角画一个2D的表格,里面写上几个字。那么这个时候就会出现QPainter与OpenGL共用或者说2D、3D共用。但是问题是调用了QPainter,drawline之后呢,OPenGL的状态被清空了丢失了,3D不显示了。 在Ope…

【海贼王之强者之路】经典动漫影视改编火爆剧情回合卡牌手游-Win服务端源码视频架设教程-开放多区-GM后台-安卓苹果IOS双端版本!

【海贼王之强者之路】站长推荐经典动漫影视改编火爆剧情回合卡牌手游-2024年3月27日最新打包Win服务端源码视频架设教程-开放多区-GM后台-安卓苹果IOS双端版本&#xff01;

python学习12:python中的字符串格式化-数字精度控制

python中的字符串格式化-数字精度控制 1.使用辅助符号"m.n"来进行数据的宽度和精度的控制 m,控制宽度&#xff0c;要求是数字&#xff08;一般是很少使用的&#xff09;&#xff0c;设置的宽度小于数字自身&#xff0c;不生效 n,控制小数点精度&#xff0c;要求是数…

python 开启restful之路

1、环境安装及配置 python & pip python 官网下载 3.8 Python Release Python 3.8.0 | Python.org Centos安装python3详细教程_centos 安装python3-CSDN博客 2、IDE工具 PyCharm Community Edition 2023.3.4 3、Flask 构建简单的 web应用 编写 app.py文件 from flask …

蓝桥杯算法赛(二进制王国)

问题描述 二进制王国是一个非常特殊的国家&#xff0c;因为该国家的居民仅由 0 和 1 组成。 在这个国家中&#xff0c;每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示&#xff0c;例如 101、 000、 111 等。 现在&#xff0c;国王选了出 N 户家庭参加邻国的庆典…

vue2 el-table指定某些数据不参与排序

vue2 el-table指定某些数据不参与排序 1、需求描述2、配置属性方法3、详细代码如下 1、需求描述 最后一行总计不参与排序 2、配置属性方法 el-table 需要配置 sort-change"soltHandle" 方法 el-table-column 需要配置 sortable"custom"属性3、详细代码如…

Go的数据结构与实现【Set】

介绍 Set是值的集合&#xff0c;可以迭代这些值、添加新值、删除值并清除集合、获取集合大小并检查集合是否包含值&#xff0c;集合中的一个值只存储一次&#xff0c;不能重复。 本文代码地址为go-store 简单实现 这是集合的一个简单实现&#xff0c;还不是并发安全的&#…

Android 性能优化(六):启动优化的详细流程

书接上文&#xff0c;Android 性能优化&#xff08;一&#xff09;&#xff1a;闪退、卡顿、耗电、APK 从用户体验角度有四个性能优化方向&#xff1a; 追求稳定&#xff0c;防止崩溃追求流畅&#xff0c;防止卡顿追求续航&#xff0c;防止耗损追求精简&#xff0c;防止臃肿 …

机器学习——聚类算法-KMeans聚类

机器学习——聚类算法-KMeans聚类 在机器学习中&#xff0c;聚类是一种无监督学习方法&#xff0c;用于将数据集中的样本划分为若干个簇&#xff0c;使得同一簇内的样本相似度高&#xff0c;不同簇之间的样本相似度低。KMeans聚类是一种常用的聚类算法之一&#xff0c;本文将介…

外包干了15天,技术退步明显。。。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

开源博客项目Blog .NET Core源码学习(12:App.Application项目结构分析)

开源博客项目Blog的App.Application项目主要定义网站页面使用的数据类&#xff0c;同时定义各类数据的增删改查操作接口和实现类。App.Application项目未安装Nuget包&#xff0c;主要引用App.Core项目的类型。   App.Application项目的顶层文件夹如下图所示&#xff0c;下面逐…