一、准备必要的文件<br /><br />1.首先去官方网站下载最新的llinux内核 <br /><br />http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2<br /><br />2.因为linux2.6.14内核需要更新版本的编译器,所以需要下载交叉编译器<br /><br />ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2<br /><br />二、安装文件<br /><br />1、把gcc解压到/usr/local/arm/3.4.1目录下<br /><br />2、接下来需要解压linux内核,输入命令:<br /><br /># tar -jxvf linux-2.6.14.tar.bz2<br /><br />将内核解压到linux-2.6.14目录下。<br /><br />三、修改makefile文件 <br /><br />内核的编译是根据makefile文件的指示进行的,Makefile文件来组织内核的各模块之间的关系,记录了各个模块之间的相互联系和依赖关系。首先修改linux-2.6.14的根目录下的makfile文件,须改的主要内容是目标代码的类型和为编译内核指定一个编译器。注释掉以下内容:<br /><br /> #ARCH ?= $(SUBARCH)<br /><br /> #CROSS_COMPILE ?=<br /><br /> 增加如下内容:<br /><br /> ARCH : = arm<br /><br /> <br /><br /><br /> CROSS_COMPILE=/usr/local/arm/3.4.1/bin/arm-linux-<br /><br /><br /><br /><br />四、安装根文件系统<br /><br /> 1.首先对flash进行分区。网上的经典**《Linux 2.6.10 以后版本对S3C2410的支持》仅提到了对Nand flash分区的方法,对Nor flash不适用。对Nor flash的分区,是通过在linux/drivers/mtd/maps下增加特定mapping驱动程序来实现。该目录下的驱动程序结构相似,可以找一个来修改成自己的。我用的是cfi_flagadm.c这个。<br /><br /> cp cfi_flagadm.c s3c2410.c<br /><br /> 将FLASH_PHYS_ADDR和FLASH_SIZE这两个宏分别修改成自己板子的flash起始地址和大小。然后修改结构体数组flagadm_parts添加自己的分区信息。<br /><br /> 接下来告诉内核使用该驱动程序。修改maps目录下的Kconfig文件,该文件决定出现在menuconfig中的项目,在config MTD_CDB89712之后添加<br /><br /> config MTD_S3C2410<br /><br /> tristate 'gggggg 2410 board'<br /><br /> 修改该目录下的Makefile,添加如下内容:<br /><br /> obj-$(CONFIG_MTD_S3C2410) += s3c2410.o<br /><br /> 现在make menuconfig时,在MTD项目中将出现gggggg 2410 board选项,选中它并重新编译内核就完成了分区工作,启动时将看到分区信息。现在,内核可以检测到分区,并找到了压缩的RAMDISK,并试图解压缩。如果你使用smdk2410默认配置,这时会报错,类似RAMDISK:incomplete 云云。解决办法很简单,将内核配置中的BLK_DEV_RAM_SIZE的值从默认的4096改为8192即可。<br /><br /> 2.在linux/arch/arm/mach-s3c2410/mach-smdk2410.c中添加ramdisk支持相关的代码。具体请参考我的文件贴图。<br /><br /> 3.修改启动参数:<br /><br /> 修改 linux/arch/arm/kernel/文件夹下的head.S文件如下:<br />ENTRY(stext)<br />/****************boot required ggggggg****************/<br /> mov r0, #0<br /> mov r1, #0xc1<br /> ldr r2, =0x30000100<br />/*********************end****************************/<br />r0恒为0,r1为architecture ID。r2为启动地址。<br /><br /><br />五、支持启动时挂载devfs<br /><br />为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件<br /><br />找到menu 'Pseudo filesystems'<br /><br />添加如下语句:<br /><br />config DEVFS_FS<br /><br />bool '/dev file system support (OBSOLETE)'<br /><br />default y<br /><br />config DEVFS_MOUNT<br /><br />bool 'Automatically mount at boot'<br /><br />default y<br /><br />depends on DEVFS_FS<br /><br />六、配置内核产生.config文件<br /><br />cp arch/arm/configs/smdk2410_defconfig .config<br /><br />make menuconfig<br /><br />在smdk2410_defconfig基础上,我所增删的内核配置项如下:<br /><br />Loadable module support ><br /><br /><br /><br />Enable loadable module support<br /><br /><br />Automatic kernel module loading<br /><br />System Type ><br /><br /><br />S3C2410 DMA support<br /><br />Boot options ><br /><br />Default kernel command string:<br /><br />noinitrd root=/dev/mtdblock/2 init=/linuxrc console=ttySAC0,115200<br /><br />#console=ttySAC0,115200使kernel启动期间的信息全部输出到串口# # 0上.2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编 #程。用户空间的串口编程针对的仍是/dev/ttyS0等<br /><br />Floating point emulation ><br /><br /><br />NWFPE math emulation<br /><br />This is necessary to run most binaries!<br /><br />#接下来要做的是对内核MTD子系统的设置<br /><br />Device Drivers ><br /><br />Memory Technology Devices (MTD) ><br /><br /><br />MTD partitioning support<br /><br />#支持MTD分区,这样我们在前面设置的分区才有意义<br /><br /><br />Command line partition table parsing<br /><br />#支持从命令行设置flash分区信息,灵活<br /><br />RAM/ROM/Flash chip drivers ><br /><br /><*> Detect flash chips by Common Flash<br /><br />Interface (CFI) probe<br /><br /><*> Detect nonCFI<br /><br />AMD/JEDECcompatible<br /><br />flash chips<br /><br /><*> Support for Intel/Sharp flash chips<br /><br /><*> Support for AMD/Fujitsu flash chips<br /><br /><*> Support for ROM chips in bus mapping<br /><br />NAND Flash Device Drivers ><br /><br /><*> NAND Device Support<br /><br /><*> NAND Flash support for S3C2410/S3C2440 SoC<br /><br />Character devices ><br /><br /><br />Nonstandard<br /><br />serial port support<br /><br /><br />S3C2410 RTC Driver<br /><br />#接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是ext2,故做如下配置<br /><br />File systems ><br /><br /><*> Second extended fs support #ext2的支持<br /><br />Pseudo filesystems ><br /><br /><br />/proc file system support<br /><br /><br />Virtual memory file system support (former shm fs)<br /><br /><br />/dev file system support (OBSOLETE)<br /><br /><br />Automatically mount at boot (NEW)<br /><br />#这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了<br /><br />Miscellaneous filesystems ><br /><br /><*> Compressed ROM file system support (cramfs)<br /><br />#支持cramfs<br /><br />Network File Systems ><br /><br /><*> NFS file system support<br /><br />保存退出,产生.config文件.<br /><br />.config文件能从提供的2.4.14.1的内核包中找到,文件名为config.back.<br /><br />七、编译内核<br /><br />make zImage<br /><br />八、下载到开发板就可以启动了。 |
|