下面我说一下详细步骤: 一些通用步骤援引了网友原文, 关键步骤我会具体说明.
我在移植时用的是linux-2.6.24 内核
例
平台信息: 目标板 s3c2410
主机操作系统 RedHat9.0
交叉编译器 arm-linux-gcc3.4.1
1. 将Linux2.6.24 内核源码放到工作目录下,并解压。
#tar xzvf linux2.6.24.tar.gz
# cd linux2.6.24
2. 修改内核源码根目录下的Makefile 文件
#vi Makefile
......
#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
# -e s/arm.*/arm/ -e s/sa110/arm/ \
# -e s/s390x/s390/ -e s/parisc64/parisc/ \
# -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
......
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
ARCH = arm
CROSS_COMPILE = /usr/local/arm/3.4.1/bin/arm-linux-
注:CROSS_COMPILE 根据自己所使用的交叉编译器路径设置。
**3 .修改arch/arm/plat-s3c24xx/common-smdk.c 文件,(linux2.6.20 或以前的版本中的目录为arch/arm/mach-s3c2410/common-smdk.c)
找到如下数据结构
static struct platform_device __initdata *smdk_devs[] = {
// &s3c_device_nand, 注释掉或者删除该语句, 防止linux 对nandflash 进行二次擦除和分区.
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
};
4 .如果想使你的内核支持devfs 以及在启动时并在/sbin/init 运行之前能自动挂载/dev 为devfs 文件系统。可以编辑fs/Kconfig :
在menu "Pseudo filesystems" 下面添加如下代码:
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y // 注意t 和y 之间有个空格, 否则执行make menuconfig 后会报错:unexpected T_WORD
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
注意: 如果继续使用原来2.4 版本用的ramdisk 文件系统, 这第4 步是必需得做的, 同时还需要在文件系统dev/ 目录
下创建如下节点:
mknod -m 660 null c 1 3
mknod -m 660 console c 5 1
如果重新制作新ramdisk 根文件系统, 根文件系统可以和linux2.6 内核同时都配置devfs 或者都不配置, 都不配置时第4 步就不用添加了.( 建议重新制作, 具体方法见下节内容)
5. 解决串口0 控制台信息输出问题,( 否则会在此卡
住:UncompressingLinux.................................................................. done, booting
以下两种方法可以任选其一:
(1) 修改内核代码屏蔽掉ZLG/BOOT 中设定启动参数, 并在配置时修改启动参数. 具体如下:
将内核中的arch/arm/kernel/setup.c 文件中的parse_tag_cmdline() 函数中的内容注释掉,禁止使用默认的参数。这样你只要在配置内核Boot options 选项的时候正确配置 也就OK 了。而且还很方便,哪天你要引导2.4 内核
了就可以直接把console=ttySAC0,115200 改为console=ttyS0,115200 就可以了,很是简单!
(2) 修该ZLG/BOOT 中的param.bin 文件将其中的ttyS0 改为ttySAC0, 要通过专门修改param.bin 的软件来完成.( 建议用方法(1))