树莓派3b——linux内核更新

时间:2024-04-01 15:15:32

树莓派3b——linux内核更新


闲来无事,试水写个博客,各位大神看看就好

也希望能帮助到别人呗树莓派3b——linux内核更新

由于学习驱动编译需要,驱动模块所依赖的系统版本必须跟内核相同,然后更换内核得把驱动更新一遍

所以,现在先编译一遍树莓派的内核吧

平台版本ubuntu16.04树莓派3b4.4.21内核的jessie系统4.9.34linux内核源码

一、准备阶段

https://github.com/raspberrypi

从上面这网站把源码包linux-rpi-4.9.y还有交叉编译工具链tools_master下载回来

这里我下载的版本是4.9.34的,相对比较新

树莓派3b——linux内核更新

使用unzip解压工具得到tool_master还有linux-rpi-4934-succeed文件夹

这里我使用的树莓派系统的旧内核版本如下

树莓派3b——linux内核更新

4.4.21-v7+,其实还是比较新了,但是还是更新一下吧,不然后面驱动编译出来也用不了

现在要在树莓派中采集原来的内核配置文件

使用以下命令,就可以拿到这个文件

1.sudo modprobe configs
2.zcat /proc/config.gz > /configs
3.把configs重命名为.config(带点),并放置到
之前解压得到的源码根目录下

树莓派3b——linux内核更新


然后修改Makefile文件,把编译平台还有交叉编译工具链的参数修改好


树莓派3b——linux内核更新

具体大概在源码根目录下Makefile的第200行左右

ARCH当然是ARM

CROSS_COMPILE参数的话要具体到tools-master目录中的编译程序

大概是这样子:xxx/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-

由于我虚拟机是64位的,所以我们在这里使用gcc-linaro-arm-linux-gnueabihf-raspbian-x64这个编译工具链,应该就可以了



二、编译

先执行下make menuconfig


树莓派3b——linux内核更新



出现这样子的界面的话,一般就选择exit退出就可以了,证明.config文件没问题了,然后检查.config文件是否存在问题,一般能顺利进入界面然后退出就可以了,注:记得把Enable loadable module support选上,以后编译内核需要本地模块支持

然后现在直接运行sudo make zImage dtbs modules -j4 #编译kernel镜像 dtbs文件 驱动模块文件 4线程全速编译

然后等编译完成就可以了


三、内核、驱动文件与dtb文件更换

把树莓派内存卡插到读卡器中,并连接到虚拟机(这里最好用外置usb读卡器,笔记本内置的那个读卡器会连接不到虚拟机,原因不明)

#以下为boot分区文件更变记录

sudo cp arch/arm/boot/zImage /media/chan/boot/kernel7.img #把arch/arm/boot/zImage复制到树莓派fat32分区下并重命名为kernel7.img

sudo cp arch/arm/boot/dts/*.dtb /media/chan/boot#把一同编译出来的dtb文件复制到fat32分区,设备树描述文件,少了这东西开不了机,有些内核版本编译了会没有生成

sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/chan/boot/overlays/ #同上

sudo cp arch/arm/boot/dts/overlays/README /media/chan/boot/overlays/ #这个应该可以忽略,不过还是加上吧


#以下为ext4分区文件更变记录
执行sudo make INSTALL_MOD_PATH=/media/chan/402bfe3d-37db-48a7-a515-31edccf953df/ modules_install
#上面这行代码吧kernel依赖的驱动模块放置到ext4分区中,没有这一步开机是不存在的


四、开机

树莓派3b——linux内核更新

成功更新内核,内核建立时间也是写博客的时间,完美收工



注意事项:


3.-j*(编译线程)
只有内核版本号完全与驱动版本号一致,设备才能正常使用!


提示找不到curses.h(内核编译make的时候图形界面依赖)
sudo apt install *curses*


配置好但提示找不到gcc
sudo apt install lsb-core