(我测试了几次使用这种方式修改linux-2.6.32.2内核不能通过,总提示Kernel panic - not syncing: Attempted to kill init!不知为何故,以后有精力了在弄吧)
(开发环境:Fedora13 mini2440友善之臂开发板 linux-2.6.32.2内核 arm-linux-gcc4.4.3)
前几天移植成功过mini2440的linux内核,当时没有记录下规范的操作步骤。今天在需要使用重新移植的时候,遇到了一些问题。下面就把移植成功的步骤写下来,这些内容主要是来自网络。主要步骤如下:
1.修改顶层Makefile文件
直接将Makefile文件里面的 ln193
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为:
ARCH ?= arm
CROSS_COMPILE ?=arm-linux- #已将建立好arm-linux-交叉工具链
然后用S3C2410的默认配置文件
#make s3c2410_defconfig //此命令 configuration written to .config
//要先按上面方法修改完成Makefile文件才能执行这一步,如图:
2.修改时钟,不修改超级终端中会出现乱码
修改Arch/arm/mach-s3c2440/mach-smdk2440.c ln163
S3c24xx_init_clocks(16934400);
改为:
S3c24xx_init_clocks(12000000);如图:
3.修改对nand的分区信息。要让内核知道nand flash的分区信息,设置成跟bootloader一致。
打开超级终端,进入superervivi,使用part show查看分区信息,如图:
在arch/arm/plat-s3c24xx/common-smdk.c中修改smdk_default_nand_part[]
/* NAND parititon from 2.4.18-swl5 */如图
4.修改CPUID,不修改将会出现无法进入内核由于CPU mach_type 不对应找不到对应的CPU。
mini2440 使用的supervivi 的机器码是782,这里需要修改机器码,否则会出现不能启动的情况。 机器码保存在内核源码的 “arch/arm/tools /mach-types” 文件中,在大概 379 行,把原来的 362改为782保存即可。
5.修改drivers/mtd/nand/s3c2410.c
如果内核是通过U-BOOT 写到Nand Flash的, U-BOOT 通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的。所以,我在这里选择禁止内核ECC校验。 搜索关键字NAND_ECC_SOFT,s3c2410_nand_init_chip函数里,修改NAND_ECC_SOFT 为 NAND_ECC_NONE
NAND_ECC_SOFT;----》NAND_ECC_NONE;是禁止flash检测
6.向内核加入对YAFFS2的支持
首先到 http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/网站下载一个 yaffs 文件系统的补丁。得到补丁包后,解压补丁,然后打上 yaffs2 的补丁,方法如下:(pstary)
#tar xvfz cvs-root.tar.gz (解压得到补丁目录 cvs)
#cd cvs/yaffs2/ (进到 yaffs2 的补丁目录下)
# ./patch-ker.sh c /work/transplantation/trans_show/linux-2.6.30.5
(执行补丁脚本,打补丁到内核中,其中/work/transplantation/trans_show/linux-2.6.30.5为内核源码的地址)
此时到内核源码的“fs/”目录下面您将看到新添加了一个名为“yaffs2/”的目录,同时 fs/目录下面的
Makefile 文件和 Kconfig 文件也添加了 yaffs2 的配置和编译条件。
7.Make menuconfig
修改Kernel Features --->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)
把这个选上。
如果不选启动时会出现Kernel panic - not syncing: Attempted to kill init!这个错误我出现过:但是我的情况是当我选上之后还是出现。不知道为什么。
还有其他一些注意的地方:(pstary)
(1).General setup --->
[*] Configure standard kernel features (for small systems) --->
选上这项,否则文件系统中的一些选项不会出现
(2). System Type ---->
[*] S3C2410 DMA support [*] Support ARM920T processor
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
(3).[*] Enable loadable module support --->
[*] Module unloading
(4).Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //这个要去掉
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> DM9000 support
< > Real Time Clock --->
(5).File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
(6).kernel Features----->
[*]Use the ARM EABI to compile the Kernel
保存退出
8.使用make zImage
在/linux2.6.29.2/arch/arm/boot就可以找到zImage文件了。
参考:http://blogold.chinaunix.net/u4/124051/showart.php?id=2519679