Exynos4412 Linux Kernel移植过程记录
项目 | 说明 |
---|---|
操作系统 | Ubuntu 18.04 |
Linux内核版本 | stable: 5.15.14 |
Image Name | Linux-5.15.14-FriendlyARM |
硬件 | CBT4412(类似:tiny4412) |
U-Boot | u-boot-2022.01-rc4 |
gcc | arm-none-linux-gnueabihf-gcc 10.3.1 20210621 |
一、Linux Kernel编译的准备工作
1、Linux Kernel下载与解压
下载地址:https://www.kernel.org/
目前,最新版本是5.16。我下载的是linux-5.15.14.tar.xz。
解压到~目录下。
tar vxf linux-5.15.14.tar.xz
2、修改内核顶层目录下的Makefile
gedit Makefile
修改:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
为:
ARCH ?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabihf-
3、导入默认配置
make exynos_defconfig
4、配置内核
make menuconfig
配置System Type —>
Samsung Exynos —>Samsung Exynos 4412
5、解决error: gmp.h No such file or director问题
编译内核
make uImage
报错:error: gmp.h 没有这个文件或目录
通过360搜索,找到解决方案:
sudo apt-get install libgmp3-dev
6、解决error: mpc.h: No such file or director
编译内核,报错fatal error: mpc.h: No such file or directory。解决方法:
sudo apt-get install libmpc-dev
7、配置tftp服务器,
配置tftp服务器具体步骤参见另一篇博文ubuntu18.04上配置tftp服务器1
把arch/arm/boot目录下的uImage复制到/CBT-SuperIOT/tftpboot/。
cp arch/arm/boot/uImage /CBT-SuperIOT/tftpboot/
8、烧写内核
安装串口助手CuteCom。
sudo apt-get install cutecom
打开/dev/ttyUSB0。如果遇到无权限打开串口的情况,通过chmod指令修改/dev目录下的ttyS0或ttyUSB0等串口的读写权限即可。
sudo chmod 666 ttyUSB0
在CuteCom终端中,输入指令
tftp 40008000 uImage;bootm 40008000;
在CuteCom终端中显示。
[20:14:46:125] ## Booting kernel from Legacy Image at 40008000 ...␍␊
[20:14:46:145] Image Name: Linux-5.15.14-FriendlyARM␍␊
[20:14:46:145] Image Type: ARM Linux Kernel Image (uncompressed)␍␊
[20:14:46:145] Data Size: 6795088 Bytes = 6.5 MiB␍␊
[20:14:46:145] Load Address: 40008000␍␊
[20:14:46:161] Entry Point: 40008000␍␊
[20:14:46:161] Verifying Checksum ... OK␍␊
[20:14:47:026] Loading Kernel Image␍␊
[20:14:47:128] FDT and ATAGS support not compiled in␍␊
以上是开发板通过串口打印出的信息,在“OK”之前的内容是64Bytes打印出的内容,之后的是Linux内核自解压程序输出的内容。在打印出“Loading Kernel Image”后,内核遇到错误停止运行。而接下来,即在内核移植之前,有必要去了解Linux内核源代码构造框架——Kbuild机制,这是进行内核代码增删改的基础。
内核make流程
有必要认识2个命令和3个文件:make %config命令、make menuconfig 命令、.config文件、Makefile文件、Kconfig文件。内核的make编译流程就是由它们组成的,它们也是组成Kbuild机制的成员。我们需要像学习shell命令一样,明白它们如何使用,以便在制作完整的Linux内核过程中不会有障碍,
下图是内核编译的流程及其各环节关系:
ubuntu18.04上配置tftp服务器解决Transfer timed out ↩︎