设为首页 加入收藏

TOP

Linux 2.6内核在S3C2440平台上移植
2014-11-24 12:20:55 来源: 作者: 【 】 浏览:0
Tags:Linux 2.6 内核 S3C2440 台上 移植

1.解压linux-2.6.34.tar.bz2源码包


2.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改


3.修改机器类型ID号


Linux源码中支持多种平台的配置信息,内核会根据bootloader传进来的mach-types决定那份平台的代码起作用,本人手里的板子是仿照三星公司官方给出的demo板改版而来,所以采用arch/arm/mach-s3c2440/mach-smdk2440.c此配置文件,打开此文件,翻到最后,有以下信息:


MACHINE_START(S3C2440, "SMDK2440")
/* Maintainer: Ben Dooks */
.phys_io= S3C2410_PA_UART,
.io_pg_offst= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
.boot_params= S3C2410_SDRAM_PA + 0x100,
.init_irq= s3c24xx_init_irq,
.map_io= smdk2440_map_io,
.init_machine= smdk2440_machine_init,
.timer= &s3c24xx_timer,
MACHINE_END


MACHINE_START(S3C2440, "SMDK2440")决定了此板子的mach-types,可以在以下文件中找到S3C2440对应的具体数字"arch/arm/tools/mach-types"文件查找S3C2440,362,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看,u-boot在Y:\test\u-boot_src\u-boot_edu-2010.06\board\samsung\unsp2440\unsp2440.c文件:gd->bd->bi_arch_number = MACH_TYPE_S3C2440;中决定)。




4.修改平台输入时钟


由于我们使用的开发板跟SMDK2440.c晶振不同,需要修改 修改平台的时钟频率,修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”,把时钟初始化中(S3C24XX_init_clocks(16934400 ))的16934400 改为12000000,因为我们的开发板上为12M。




5.解压yaffs.tar.gz2源码包,进入yaffs2文件夹,给内核打上补丁使内核支持yaffs2


Linux官方不支持yaffs文件系统,我们需要打上相应的补丁


2.6.35(含)之前的补丁与2.6.36(含)之后的补丁从这里下载


下载在Linux公社的1号FTP服务器里,下载地址:


密码:www.muu.cc


在 2011年LinuxIDC.com\10月\Linux 2.6内核在S3C2440平台上移植


下载方法见 http://www.linuxidc.net/thread-1187-1-1.html



#./patch-ker.sh c /home/linux-2.6.34




6.修改内核mtd分区和bootloader(vivi)使其一致


使用vivi或U-boot烧写内核、根文件系统时,需要知道内核以及根文件系统的具体物理地址,我们可以修改一下文件更改此信息,注必须保证这里的地址与vivi,u-boot保持一致,否则出现烧写启动不一致的现象。


我的分区是:


编辑文件arch/arm/plat-s3c24xx/common-smdk.c


static struct mtd_partitionsmdk_default_nand_part[] =


{


[0]= {


.name = "bootloader",


.size = 0x00030000,


.offset = 0,


},


[1]= {


.name = "kernel",


.offset= 0x00050000,


.size = 0x00300000,


},


[2]= {


.name = "rootfs",


.offset= 0x00350000,


.size = 0x03cac000,


}


};




7.修改文件drivers/mtd/nand/s3c2410.c


内核中去掉对nand FLASH的ecc校验,由yaffs自己完成


将s3c2410_nand_init_chip函数里的NAND_ECC_SOFT改为NAND_ECC_NONE



8.到llinux-2.6.30目录下执行命令


找一个内核自带的与S3C2440比较接近的配置文件,修改得到我们的配置文件


#cp arch/arm/configs/s3c2410_defconfig .config



9.执行make menuconfig,并对选项进行配置


1)SystemType --->


S3C2440 and S3C2442 machines --->


仅保留SMDK2440 与SMDK2440 whith S3C2440CPU module两个选项,将其他的选项全部勾掉


2)Kernel Features --->


[*]Usethe arm EABI to compile the kernel(选中该选项,因为我们采用的编译器是带EABI(软浮点运算)的编译器)


3)Filesystems --->


a、把与ext2 ext3 ext4相关的所有选项全部去掉(为了减小编译完内核的体积、可选)


b、Miscellaneous filesystems --->


<*>yaffs2file system support(选中此选项)


4)Device Drivers----->
Character devices--->
[*]/dev/kmem virtual device support
[*]Legacy(BSD) PTY support
Block devices--->
<>Loopback device support
<>RAW block device support


5)保存退出


10.编译


make zImage,在arch/arm/boot下生成编译好的可执行程序:zImage vivi一般采用此类型的内核


make uImage,在arch/arm/boot下生成编译好的可执行程序:UImage u-boot一般采用此类型的内核


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇u-boot-2010.06在unsp2440上的移植 下一篇Linux 2.6.34下DM9000网卡驱动移植

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)
·有没有Java swing教 (2025-12-25 15:19:09)
·Start, Stop, and Di (2025-12-25 14:50:57)
·C语言入门教程:零基 (2025-12-25 14:50:54)