[ZLG-ARM] Linux2.6内核在创维特jx2410平台上的移植一

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

搭建Linux交叉编译环境,需要的朋友赶紧哦

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

185

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部