第三阶段:35-36.树莓派Linux内核编译、Linux内核镜像拷贝至树莓派并启动新内核

树莓派Linux内核编译
为什么要配置编译?
因为:驱动代码的编写,驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核
厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码

第一种方式:cp 厂家.config .config。
第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置。
第三种方式:完全自己来。
在这里插入图片描述
编译指令:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

是否成功编译?
可以看到在内核的源码树目录下生成了vmlinux(没有压缩的linux)即为成功。
在这里插入图片描述
而我们真正想要的目标镜像是/arch/arm/boot/zImage
在这里插入图片描述
树莓派挂载新内核
总体概述

在这里插入图片描述
1.打包zImage文件成kernel_new.img(用linux源码包里的工具)

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

树莓派的镜像文件结尾就是.img,这个文件就是要放到sd卡中的文件
2.树莓派sd卡挂载到ubuntu上(两个分区:boot kernal/根文件)
树莓派断电,把SD卡插入读卡器后按照下图配置

在这里插入图片描述
查看内核信息,有设备接入的时候内核会打印出驱动层面的信息。

dmesg

接入成功!
在这里插入图片描述
sdb1,2分别是树莓派sd卡的两个分区
①一个fat分区。是boot相关的内容,kernel的img文件在此分区。
②一个是ext4分区,也就是系统的根目录分区。(cd /进入的就是系统的根目录)

这里我在我的ubuntu桌面底下(/Desktop)新建两个文件夹

mkdir data1

mkdir data2

然后分别关联到sd卡的两个分区中(必须挂载到文件夹才能看到里面内容)

sudo mount /dev/sdb1 data1

sudo mount /dev/sdb2 data2

查看data1,2分别存放的是什么
在这里插入图片描述
可以看到data1为fat分区(boot、kernal相关),data2为ext4分区(系统根目录相关),要对应好。

老陈这里的boot用的之前刷机刷好的,没有重新进行移植,下面直接讲了内核的移植。

3.安装modules
modules就是内核驱动相关,少了这一步类似网卡,wifi,usb,HDMI这些都用不了

注意:操作的是ext4分区,对应的就是data2

来到linux-rpi-1.14.y文件路径下操作

安装modules的指令是:

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install

实际使用的时候要将“[ext4]”更改为自己data2的绝对路径 ,这里根据我自己的文件路径修改成:

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/zd/data2 modules_install

可以看到很多的.ko文件,这与驱动相关。出现的提示make: arm-linux-gnueabihf-gcc: Command not found不用管它。
在这里插入图片描述
4.拷贝新kernel.img文件
注意查看原来镜像名字是kernel7.img

ls /home/zd/data1

在这里插入图片描述
因为原来的这个kernel7.img将要被覆盖(树莓派镜像规定必须要定义成这个名字),为了防止刷机失败,或者拷贝过程中文件损坏,需要提前用别名备份这个文件。打开新的终端(ctrl alt t)(方便操作罢了),进入其存放路径(cd /home/zhugl/Desktop/data1)

sudo cp kernel7.img kernel7OLD.img

从源码树目录(linux-rpi-4.14.y)拷贝kernel_new.img(是由zImage打包而成)到data1并且命名为kernel7.img覆盖原来的文件

sudo cp kernel_new.img /home/zd/data1/kernel7.img

检查拷贝是否有问题:md5sum显示文件的唯一编码号,若相同则为同一个文件

md5sum kernel_new.img

md5sum /home/zhugl/Desktop/data1/kernel7.img

在这里插入图片描述
编码号一样,拷贝正确。

5.拷贝其他文件到fat
都是从目录linux-rpi-4.14.y进行拷贝
这些配置文件是为了能够加载驱动以及一些其他的配置。

————————①

更改前

cp arch/arm/boot/dts/.*dtb* [fat]/

根据实际更改后

sudo cp arch/arm/boot/dts/.*dtb* /home/zd/data1/

————————②
更改前

cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/

根据实际更改后

sudo cp arch/arm/boot/dts/overlays/.*dtb* /home/zd/data1/overlays/

注意:*为通配符,.*dtb (dtb前后均有文字),将.带头的、中间有dtb的,以为结尾,将有.和dtb的文件全部拷贝过来。
————————③

更改前
README有没有都行

cp arch/arm/boot/dts/overlays/README [fat]/overlays/

根据实际更改后

sudo cp arch/arm/boot/dts/overlays/README /home/zd/data1/overlays/

四、在树莓派上运行
1.用window配置sd卡文件方便观看启动过程

如果之前在做别的项目,例如串口编程时用于串口数据交互和传输会把这个配置信息删掉,这时需要添加回来,用来观察操作系统启动过程
在这里插入图片描述
点击选择断开连接sd卡,使其重新挂载在windows上。
在这里插入图片描述
打开sd卡中boot文件夹下的cmdline.txt
按照上图位置添加(直接在虚拟机上修改这个配置文件也可以)。
2.sd卡插回树莓派
sd卡插回树莓派,USB-TTL连接。注意树莓派要在断电下操作

3.打开secureCRT 串口方式登陆树莓派
树莓派重新上电,可以看到启动正常。

如何确定内核已经更换了呢?

查看内核版本号

uname -r

原来版本为4.14.98-v7
在这里插入图片描述
注意:之前在上一个内核版本树莓派里编写的一些Demo文件都在!而且以前配置的SSH登录、固定IP地址配置都原样不动!所以内核新配置的那两个分区并没有改变以前的一些文件和配置,因为我们只是更新了kernal.img,Uboot和根文件系统都没改变。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值