可以参考这个博客http://blog.csdn.net/u010944778/article/details/42007063
我是结合郭工的视频还有文档进行的内核移植
首先从官网下载内核,https://www.kernel.org/,我用的是linux-3,0
解压tar -xjf linux-3.0.tar.bz2
cd linux-3.0
修改Makefile vim Makefile
- ARCH ?= $(SUBARCH)
- CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
+ARCH ?= arm
+CROSS_COMPILE?= /opt/buildroot-2012.08.packet/buildroot-2012.08/arm920t/usr/bin/arm-linux-(交叉编译器自己制作,我是之前已经做好了,注意路径)
# This allow a user to issue only 'make' to build a kernel including modules
# Defaults to vmlinux, but the arch makefile usually adds further targets
all: vmlinux
+ cp arch/arm/boot/zImage . -f
+ mkimage -A arm -O linux -T kernel -C none -a 30008040 -n "Linux Kernel" -d zImage \ linuxrom-s3c2440.bin
+ rm -f zImage
(注意在这里不能用空格代替tab)
@@ -1201,6 +1204,7 @@
-o -name '.*.rej' -o -size 0 \
-o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
-type f -print | xargs rm -f
+ @rm -f linuxrom-s3c2440.bin
修改晶振频率
-- s3c24xx_init_clocks(16934400);
+ s3c24xx_init_clocks(12000000);
修改驱动:
-- #define S3C24XX_SERIAL_NAME "ttySAC"
+ #define S3C24XX_SERIAL_NAME "ttyS0"
Make menuconfig
在这里可以执行export TERM=vt100,使界面更好看,还可以显示一些隐藏的选项
.修改MACHINE ID设备编号
make
进行分区
vim arch/arm/plat-s3c24xx/common-smdk.c
根据自己的需要进行分区:
分区很关键,关系到Linux根文件系统的移植,还有u-boot里环境变量的设置
我现在遇到的问题就很头痛
这是我的分区:
MTDPART_SIZE_FULL自动设置地址
因为总共只有256M,不要超过了
make
Ok 内核做完了!
问题总结:
write 30008000 100000 800000'
重新配置内核,取消下面三个选项(红色部分)。
在Make menuconfig时:
Device Drivers ->
Memory Technology Devices (MTD) ->
不要选择下面这三个选项
<>FTL (Flash Translation Layer) support
<> NFTL (NAND Flash Translation Layer) support