【从零到一的Raspberry】数莓派踩坑实录(二) 内核编译配置和模块安装

发布于:2022-11-10 ⋅ 阅读:(821) ⋅ 点赞:(0)

写在前面

  本次作业具有挑战性,不过我觉得不管哪一环节出错了,你都要知道如何把它还原到初始状态,这也你就不是在危险得操作,而有还原的保障.因此介绍我探索的一种还原数莓派系统的方法,大家可以仔细看一下,也可以直接看红字,跟着红字操作,你就可以在内核无法运行时还原到默认系统!
  声明:本文章核心内容主要参考数莓派官方网站,一切以官方网站上的指令为准,敬请访问

https://www.raspberrypi.com/documentation/computers/linux_kernel.html

重要!!! 系统还原方法

  当我们配置内核,然后把配置好的内核移植到数莓派上时,可能无法工作,无法启动,无法连接等等.当你发现无法恢复需要重新配置时,请先把系统还原.以保证移植替换内核之前数莓派上运行着正常的系统.下面的方法,亲测有效一次,当然需要大量尝试来确保其在不同版本数莓派上的有效性.
  复位文件linux64_defconfig,这个文件我会发到群里,大家解压好.
在这里插入图片描述

  这个复位文件是什么呢?这个复位文件本质上是一个按照默认配置编译好的内核文件,我们只需要挂载TF卡然后进行安装就可以了,这也就可以使系统快速还原至一个正确的内核.

KERNEL=kernel8#64位内核名
sudo mount /dev/sdb1 mnt/fat32#挂载tf卡
sudo mount /dev/sdb2 mnt/ext4

sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install#安装模块

sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img#备份原镜像
sudo cp arch/arm64/boot/Image mnt/fat32/$KERNEL.img#移动编译好的镜像文件到boot中
sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README mnt/fat32/overlays/

sudo umount mnt/fat32#卸载tf卡
sudo umount mnt/ext4

  这段代码我已经写成了recovery.sh,放入linux64_defconfig文件夹中.你要做的只是

1.插上tf卡到电脑
2.解压linux64_defconfig文件
3.cd到linux64_defconfig文件夹中,输入sh recovery.sh等待一定时间,就可以恢复成功.
4.拔下tf卡,插到数莓派上,等待片刻,黄灯不闪,系统恢复成功.


  其中运行完脚本recovery.sh如下所示.
在这里插入图片描述

manuconfig配置内核

  配置内核总共有3方式,见本文:树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核
  其中我们还原系统采用的是defconfig方法,即使用厂家提供的参考配置,而下面配置内核采用manuconfig方法
  下面仍然以64位系统为例,32位系统请参考开头给的官网参考来做

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNEL=kernel8 menuconfig

  这里指明了make参数,分别是架构名,交叉编译工具链,内核镜像名(64位叫kernel8,32位较kernel7或者kernel7l)
  稍等几秒后弹出如下画面,就可以开始手动配置了.
在这里插入图片描述
  第一次我们首先按照manuconfig的默认配置来(Note:这里manuconfig的默认配置和之前所述的还原系统时用的厂家配置,这两者配置并不相同,编译的内核镜像大小是有区别的,但最后执行完毕都会生成 .config 文件,用来作为配置文件指导内核的编译)
  直接连续按下两次ESC,这时会有退出询问,询问是不是要保存配置
  点击确定
在这里插入图片描述
  然后可以看到提示信息告诉我们配置以及写入.config文件了
在这里插入图片描述

编译内核(Build with configs)

  无论你使用的是defconfig还是manuconfig,亦不论你的manuconfig配置如何,在上一步中你已经完成了 .config 文件的生成,这个文件将会指导我们这一节中的内核编译.

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNEL=kernel8 Image modules dtbs -j 10

  指明架构,交叉编译工具链,内核镜像名,生成镜像,模块和dtb,注意64位生成Image而不是zImage(32位),同时使用-j 10为其开启多线程加速.j后面的数字最好是cpu核心的1.5倍为最好.
  根据电脑性能和配置内核大小不同,这一步将会花费数分钟到数十分钟不等的时间,耐心等待.
在这里插入图片描述
  编译结束,接下来将编译好的内核挂载到tf卡上

TF卡挂载新内核

  在当前编译好的文件夹下编写脚本文件loadkernel.sh,该shell脚本可以帮助自动化挂载新内核到TF卡.
在这里插入图片描述

  插入tf卡,运行脚本

sh loadkernel.sh

  运行完毕后拔下卡,插到数莓派上,发现绿灯很快就灭了,甚至都没有与网线成功连接(网线灯都没有亮).当然,我们其余的步骤都是没有问题的,因为defconfig就是按照如上步骤进行下来的,而manuconfig不行.因此这里推断是manuconfig中需要勾选一些重要启动项目才能让数莓派启动成功.那么下面就开始研究manuconfig配置.

其他参考
https://www.stephenwagner.com/2020/03/17/how-to-compile-linux-kernel-raspberry-pi-4-raspbian/
也许是没有设置名称?

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到