linux2.6.32移植概要总结 2010-08-18
来源:互联网 发布:python 拟合分布 编辑:程序博客网 时间:2024/06/06 06:31
cd linux-2.6.32/arch/arm/mach-s3c2440
cp mach-smdk2440.c mach-test2440.c
以上,新建了一个mach-test2440的平台,同级的还有mach-mini2440,mach-at2440evb.c等文件,对应不同的开发板.
(一)修改机器码
打开mach-test2440.c, 找到最后的MACHINE_START宏,
例如MACHINE_START(TEST2440, "TEST2440")这一行,
第二个参数无所谓,重要的是第一个参数,在gcc编译这个mach-test2440.c的时候,会把TEST2440匹配到/include/asm-arm/mach-types.h中的"#define MACH_TYPE_TEST2440 1999"这里, 如果在mach-types.h中找不到MACH_TYPE_TEST2440, gcc编译mach-test2440.c则报错;
还有,/include/asm-arm/mach-types.h是每次make zImage过程中, 由arch/arm/tools/mach-types文件生成的,
总结,修改机器码,涉及内核代码的三个地方,MACHINE_START宏,mach-types.h,mach-types,初启动时,bootloader向内核传递一个机器码,因为这里用的是友善的supervivi,所以bl传递的机器码是1999。
(二)修改晶振频率
还是文件mach-test2440.c, 找到static void __init smdk2440_map_io(void)函数中, 把其中的 16934400改为12000000, 晶振频率错误可能引起串口打印乱码,
(三)修改SMDK2440对应的函数名称
在新创建的mach-test2440.c中,把所有的smdk2440字样的函数改成test2440, 避免名称冲突.
vi mach-test2440.c
vi下输入:%s/smdk2440/test2440/g
(四)修改对应的Kconfig和Makefile
进入/arch/arm/mach-s3c2440目录, 编辑Makefile和Kconfig:
(1)makefile最后增加一行: obj-$(CONFIG_MACH_TEST2440) += mach-test2440.o
(2)kconfig最后一行endmenu之前增加:
config MACH_TEST2440
bool "TEST2440 development board By dos5gw"
select CPU_S3C2440
select S3C2440_XTAL_12000000
select EEPROM_AT24
select S3C_DEV_NAND
select S3C_DEV_USB_HOST
help
Say Y here to select support for the TEST2440.
这里可以仿照SMDK2440和MINI2440的kconfig部分
(五)初次编译测试
make s3c2410_defconfig, 载入2410的默认配置,
make menuconfig, 在system type->S3C2440 Machines选中刚才的MACH_TEST2440,并去掉其他s3c24xx处理器的支持,(暂时只剪裁这一点吧,上次因为剪裁太多,出问题了)
写入nand flash, 开机测试. 根据串口屏显查看有无进入start_kernel()函数,
(六)yaffs2补丁
由于根分区采用yaffs2格式, 还要打yaffs2补丁, 前面已经写过, 略.
(七)修改nand flash分区,
在mach-test2440.c, 中增加nand flash分区的相关代码,
mach-test2440.c中定义的platform_device,与common-smdk.c中定义的platform_device不重复,
mach-smdk2440.c中定义的platform_device,与common-smdk.c中定义的platform_device重复,
比如,mach-smdk2440.c和common-smdk.c两个文件都对同一个s3c_device_nand(platform_device类型)进行platform_add_devices()操作,则在make zImage会报错不能创建相同的设备.
(八)添加其他驱动
包括网卡,RTC,LCD背光,LCD显示,ADC,触摸屏,usb外设,SD卡,声卡驱动.
等根据板载外设, 在mach-test2440.c文件内, 每个外设都要对应创建platform_device类型的static变量,
(注意1)所有2440平台中共用的platform_device,比如s3c_device_lcd,s3c_device_usb,s3c_device_nand等,这些使用已有的定义.
除此之外的外设需要手动注册成platform_device, 根据板载设备的实际情况,比如板子上搭载了DM900网卡/UDA1341声卡(这两个设备在mach-mini2440.c中都有定义), 但在2440通用平台中没有定义,所以要自己定义网卡的paltform_device;
创建的platform_device变量,添加进static struct platform_device *test2440_devices[] __initdata中;
然后再_machine_init()中对添加备结构体数组.
static void __init test2440_machine_init(void){
platform_add_devices(test2440_devices, ARRAY_SIZE(test2440_devices));
}//把platform_device结构体数组进行add_device()操作
对于mach-test2440.c文件内定义的函数/结构体, 与其他平台对应的文件都是一致的, 比如mach-mini2440,mach-at2440evb.c
定义的函数都要注册进MACHINE_START 宏中,
(九)调整Kernel Configure中的参数
(1)第八步中驱动文件对应的选项,
(2)启动参数: boot option -> cmd line改为:noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200, 要与bl传递的参数一致
(3)把不必要的选项去掉, 减小内核映像体积.
之后就是文件系统的制作了
- linux2.6.32移植概要总结 2010-08-18
- linux2.6.32系统移植过程总结
- S3C2440 linux2.6.31移植总结
- 基于linux2.6.33 spi驱动移植总结
- [S3C6410]Linux2.6.28到Linux2.6.32的内核移植
- Linux2.6.32.2移植到Mini2440
- 移植linux2.6.32.2到mini2440
- linux2.6.32移植DM9000驱动程序 分类
- linux2.6.32 移植到s3c2410平台上
- 移植linux2.6.32.2到mini2440
- 移植linux2.6.32.2到mini2440
- linux2.6.32.2移植问题集锦
- linux2.6.32.2 cs8900驱动移植记录
- S3C2440 linux2.6.32.2 tslib1.4 移植
- linux2.6.32 LED子系统移植及分析
- Linux2.6.32.2移植到Micro2440
- Mini2440 Linux2.6.32.2移植_02_
- Mini2440 Linux2.6.32.2移植_03
- 使用Spring写应用程序的几点体会
- 函数、宏、内联函数
- JQuery调用ajax实例
- 分享我自己用的Javascript图片浏览器
- SqlServer 游标的小例子
- linux2.6.32移植概要总结 2010-08-18
- GCC-3.4.6源代码学习笔记(83)
- JQuery调用ajax实例
- Java视频学习教程(英文原版哦)
- ArrayUtils 笔记
- 常用正则表达式
- 表实体bean的关联
- JQuery 中几个用法备注令附一个关于操作checkbox的疑问
- JQuery 中几个用法备注令附一个关于操作checkbox的疑问