目录
一、bootloader、kernel、rootfs联系
二、内核移植
1. 内核源码获取
2. 内核配置与编译
🍍 基础配置与编译
🍍 TF卡分区
🍍 内核烧录
三、参考内容
一、bootloader、kernel、rootfs联系
kernel可以理解为一个庞大的裸机程序,和uboot以及其他比如点灯类似的裸机程序没有本质区别,只是kernel分为用户态和内核态,内存和设备操作与裸机程序不同。kernel是最底层,负责各种外设硬件的驱动,kernel类似于黑盒子,从外面只能看到接口,无法看到具体功能是如何实现的,内核初始化提供的接口后,将控制权通过init程序交给根文件系统。
详见:一文讲解Linux内核中根文件系统挂载流程 - 知乎
二、内核移植
1. 内核源码获取
下载Linux5.7.1源码,下载后完成后,将代码复制到Ubuntu新建的用户中并解压。
kernel/git/stable/linux.git - Linux kernel stable treehttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/tags?h=v5.10.161
或者在国内镜像网站下载,速度相比于官网快很多很多。
Index of /kernel/linux/kernel/v5.x/https://mirror.bjtu.edu.cn/kernel/linux/kernel/v5.x/
2. 内核配置与编译
🍍 基础配置与编译
解压完成后,使用VScode打开linux源码,同uboot编译前一样进行配置,首先在顶层Makfile中指定架构和交叉编译工具。注意:arm必须是小写,必须!
在uboot移植中,我们使用licheepi_nano_defconfig配置uboot,以识别开发板(不同开发板拥有不同的外设),同样,Linux内核也需要进行配置,在墨云对Linux内核进行移植时,提到:
进入内核源码中的arch/arm/configs目录中,可以看到有很多开发板的配置文件,其中sunxi_defconfig是全志的配置文件,但是该配置文件非常不全,需要额外配置大量的选项,一般选项多大上千个,这里先使用licheepi_nano的配置文件。
因此,同样,作为新手来讲,只能使用荔枝派的配置文件,下载文件后放到arch/arm/configs文件夹中,在根目录使用以下命令配置Linux内核:
make linux-licheepi_nano_defconfig
可能会报错:
使用如下命令安装组件:
sudo apt-get install flex
sudo apt-get install bison -y
如果出现以下错误,考虑更换镜像源,注意一定要按照自己的Ubuntu版本选择对应的源,最好更新为最新的清华源:
使用make命令编译,经过漫长的等待后,在 arch/arm/boot目录下生成内核文件:zImage,在arch/arm/boot/dts目录下设备树文件:suniv-f1c100s-licheepi-nano.dtb。
如果出现以下错误,使用sudo apt install libssl-dev命令安装对应缺失库文件即可。
🍍 TF卡分区
uboot移植的时候bootcmd变量记录了内核文件(zImage)和设备树(.dtb文件)的存放位置,那么现在我们就要准备好TF卡的分区,一旦编译出内核文件和设备树文件,就可以放到TF卡的指定位置,启动Linux内核。
我们需要将TF卡分区如下,其中uboot只能识别FAT16格式,EXT4格式为Linux内核识别格式。注意:一定要把上面图片中的分区删除,否则无法识别到启动文件(zImage、.dtb)。
分区 | 分区一 | 分区二 |
名称 | kernel | rootfs |
分区格式 | FAT16 | EXT4 |
大小 | 32M(可以随意填写) | 剩余空间 |
TF卡配置完成如下图所示,注意我的TF卡是8G容量。
注意需要给uboot预留1M的空间,在【之前的空余空间】选择1M即可,在上面的可视化分区中无法看到这个预留空间。
🍍 内核烧录
将上面编译产生的zImage、suniv-f1c100s-licheepi-nano.dtb两个文件拷贝到KERNEL分区。将TF卡插好之后上电,打开串口调试,按下复位按键,等待uboot启动,5秒倒计时结束,读取两个文件,启动Linux内核。至此,Linux内核移植完成,下一步是Linux根文件系统(rootfs)。
三、参考内容
1. 墨云uboot移植;
2. 稚辉君github项目;
3. 正点原子《嵌入式Linux驱动开发指南》 文章来源:https://www.toymoban.com/news/detail-605858.html
文章来源地址https://www.toymoban.com/news/detail-605858.html
到了这里,关于(三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!