Cetos内核编程——没错!你猜对了我踩了好几个坑
由于我们是将Linux内核编译成一个在ARM芯片上运行的嵌入式的Linux,因此在编译之前需要安装交叉编译工具arm-linux-gcc在Cetos上部署交叉编译工具的步骤可以参考此博客教程Cetos安装交叉编译工具链。
既然是编译内核,那么就需要一个Linux内核以供我们编译呀,这里咯,可以到官网下载Linux 内核官网 ,也可以到第三方的资源网站下载。
内核下载
- 我这里就简单演示一下官网的下载咯
- 至于这三个版本的区别可以动动你们的手,自行搜索咯,这里就不详述了。
-
另外这里附上老师提供的资源,由于百度网盘的限速比较让人难受,我就将资源上传到了七千牛云存储空间以供大家方便下载,感兴趣的可以了解一下滴,他们家的云端资源存储完全免费。
官网新版:Linux-5.16.14
老师分享的版本:Linux-3.5-2
- 这里还是推荐老师分享的这个版本,低版本更稳定,Linux其实向上的兼容性并不是特别的理想。
解压内核
Windows端本地Linux内核上传到Cetos端
- 至于此工具的使用我在上篇的交叉编译工具安装中提及过使用的步骤,请自行查阅
Cetos端内核包解压
-
解压的目录自行随意,尽量解压到一个自己较辨识的目录下
tar xvJf linux-5.16.14.tar.xz -C /usr/src/
注意的一点就是:.xz 结尾的压缩文件 需要在指令中添加参数 J
这一点与解压 .tgz文件 所用到的 z 参数略有不同
配置项
- 关于配置项这里引用一位博主的解读,大家也可以参考这位博主大佬的博客分享潜心做事GG原文链接
重点来了,解压之后,编译之前要先生成 config 配置文件。这个文件是干什么的呢?它是编译时的必备文件,指明了所有的配置项,编译时就是根据你选择的配置项来定制内核的。在你的 CentOS 内同样有这样一个配置文件,在 /boot/ 目录下有一个 config 开头的文件,就是它,你可以先 cat 一下,会发现都是键值对,所有的配置项都在这。
配置项非常多,可以随心所欲的定制内核,把不需要的全部关闭,当然也不是随心所欲,某些配置项是必须要选的,否则可能连系统也启动不了。
选择配置项的方式有以下几种,当然它们的目的都是为了生成 config 文件,所以选择哪种都可以。
make config (基于文本的配置界面)
make menuconfig (基于文本菜单的配置界面)
make xconfig (基于图形窗口的配置界面)
make oldconfig (基于原来内核配置的基础上修改)
-
这里进入刚才解压Linux内核的目录 执行 make menuconfig (基本文本菜单的配置界面) 图像化对于嵌入式来说性价比并不划算,没有必要在一个本就存储空间不大的芯片中嵌入一个图像化界面。
cd /usr/src/linux-5.16.14/ make menuconfig
-
我们执行以下命令 安装一个 ncurses-devel
yum install ncurses-devel
make menuconfig 是需要 ncurses-devel 的这里之前没安装过需要安装一下。然后再次执行上述命令
-
这里提醒出现了一个错误 提醒意思是说 系统没有安装glibc开发包的问题
-
我们执行命令安装一下此包
yum install glibc-devel.x86_64
哎 。。。习惯了 这里又出现了一个错误
command not found 未找到命令,相关文件缺失,我们这里需要下载一下 bison 与 flex 这两个包即可。
yum install bison yum install flex
再次执行命令 make menuconfig
呀我去。。。啊这就离谱。GCC版本太低 Compiler is too old. 感情这Linux是个直男哈,,,”你太老咯“!!!
怎末办??还能怎末办。。。该编译器呗。。
怎末该,你怎末安装的就怎末倒回去再走一遍呗。
这里推荐5.1.0的我们就去尽量找一个高版本滴吧。
-
木的办法,这期间我把能想到的都测试,还是报错,而且这个错误很奇怪
-
至于arm-linux-gcc的版本我已经更换还是无法解决
后续这是编译器指定后还是一样的结果
-
交叉编译工具链的指定
额 。。。这里出现一个错误。这个简单之前没有指定编译平台的交叉编译工具链,指定一下就好咯。
输入 ls arch/ 可以看到支持的编译架构平台
我们既然是移植到A9芯片上,我们这里指定为arm平台
export ARCH=arm 指定编译的平台环境变量 echo $ARCH 查看当前的指定的平台
-
指定编译工具链
进入指定安装的arm-linux-gcc的bin目录指定gcc工具
export CROSS_COMPILE=arm-none-linux-gnueabi- #指定编译工具链的调用
-
输入make 这里提醒一个错误 .config文件未设置
-
这里就用 mini2440_defconfig 吧,这个其实随意都行,这里为了演示内核的编译,板子其实没有大的影响。
还是这个错误,,提醒不支持这个编译器。。。
-
抱歉咯,呀。。前面因该是我想错了,我起初以为是因为我为指定其编程的工具链与平台,在编译阶段找不到编译器,好像现在看来也不是这么回事。
- 明天再找找原因,如若不行,可能就得用Ubuntu的咯。。。。
-
哎,做了一下午直到现在,还是没有找到原因。👀
🌀其实个人对嵌入式硬件这块是不能说是不懂,只能说是完全不知,只是单纯的对Linux有少许一点点的浅薄了解。
从网络中搜集资料到去实践这每一步,其中若要找个理,我只能说是,别问,问就是,阿巴阿巴,人家老师要求的嘛。。哈哈,开个玩笑。
其实,很早就看到Linux可以移植到一个芯片上,并定制一个mini的linux,这不就有一个属于自己的移动linux嘛。这就让我想起了”树莓派“的传说。,哎 ,这件事呢!就很酷,有品,我喜欢。从有到无,从构想到实现,使每一个设想都能无限的接近于现实,这一过程本身就比较有趣。🐧
哎。。睡咯,,睡咯,,😴梦里啥子都有的咯。。偶尔励志一下嘛,怎么还当真了。
最近服务器一直被植入后台木马恶意挖矿,(额。。我这破烂服务器还有这种”好事“)这个博客不知何时又会崩掉。如果服务器这边出先后台木马导致博客无法出现一些奇怪问题,我会及时重新部署。亲,您稍安勿躁,当然也没的人看咯。😊