(三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

目录

一、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)。

分区分区一分区二
名称kernelrootfs
分区格式FAT16EXT4
大小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驱动开发指南》      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值