前言:
本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。
相关帖子:
环境说明
S3C2440开发板
串口线
下载线
光盘linux kernel源码、补丁文件:
002_JZ2440资料光盘_20200423(免费)\资料光盘\B盘\uboot+kernel+filesystem的镜像源码及补丁\kernel\linux-2.6.22.6.tar.bz2
002_JZ2440资料光盘_20200423(免费)\资料光盘\B盘\uboot+kernel+filesystem的镜像源码及补丁\kernel\linux-2.6.22.6_jz2440_v2v3.patch
编译下载
1- 上传文件到虚机
将文件linux-2.6.22.6.tar.bz2、linux-2.6.22.6_jz2440_v2v3.patch上传到虚机路径:/home/lhk/2440_learn/kernel/linux-2.6.22.6
2- 解压linux-2.6.22.6.tar.bz2
tar -xjvf linux-2.6.22.6.tar.bz2
3- 打补丁
# cd linux-2.6.22.6
# pwd
/home/lhk/2440_learn/kernel/linux-2.6.22.6/linux-2.6.22.6
# patch -p1 < ../linux-2.6.22.6_jz2440_v2v3.patch
4- 配置编译
config_ok为韦东山提供的内核配置文件
cp config_ok .config
make menuconfig
make uImage
编译的uImage路径为:
/home/lhk/2440_learn/kernel/linux-2.6.22.6/linux-2.6.22.6/arch/arm/boot/uImage
5- 烧录uboot.bin文件到开发板
开发板上电,进入到uboot模式,先擦除flash中原有内核:
OpenJTAG> nand erase kernel
NAND erase: device 0 offset 0x60000, size 0x200000
Erasing at 0x240000 -- 100% complete.
OK
擦除完flash中内核后,重启单板会报错找不到内核:
Booting Linux ...
NAND read: device 0 offset 0x60000, size 0x200000
Reading data from 0x25f800 -- 100% complete.
2097152 bytes read: OK
## Booting image at 30007fc0 ...
Bad Magic Number
将编译好的uImage烧录进开发板,重启开发板可以看到正常进入到内核。
内核配置
内核配置文件.config文件可以由下面几种方式生成
make menuconfig
手动配置内核
厂商提供
本例中config_ok复制成.config,这里的config_ok即为厂商(韦东山)提供的
使用芯片默认配置
可以搜索系统默认配置
find ./ -name "*defconfig*"
对于我们的2440可以选择arch/arm/configs/s3c2410_defconfig作为默认配置编译,然后在此基础上修改配置文件生成我们需要的.config,或者直接手动修改arch/arm/configs/s3c2410_defconfig文件,复制成.config文件
#find ./ -name "*defconfig*"
arch/arm/configs/s3c2410_defconfig
...