移植mach-mmp/下面的ttc_dkb.c 文件。
ttc_dkb.c 文件是整个平台init各种device drivers 入口。整个平台的device drivers 都是从这里开始init。
first, 看一下在mach-mmp目录树下的内容:
|-- aspenite.c
|-- avengers_lite.c
|-- clock.c---------------------------------(6)
|-- clock.h
|-- common.c
|-- common.h
|-- devices.c----------------------------(5)
|-- flint.c
|-- include--------------------------------(3,4,5,6,7,8)
|-- irq-mmp2.c
|-- irq-pxa168.c
|-- jasper.c
|-- Kconfig-------------------------(2)
|-- Makefile------------------------(1)
|-- Makefile.boot
|-- mmp2.c
|-- pxa168.c-------------------------(3)
|-- pxa910.c--------------------------(4)
|-- pxa910-squ.c
|-- resource
|-- tavorevb.c
|-- time.c-------------------------------(7)
|-- ttc_dkb.c---------------------------(8)
1,2 参考Android 平台对mach--mmp的Kconfig 和makefile的修改,来修改mach--mmp的kconfig 和Makefile。
下面我们看一下ttc_dkb.c 的2.6.35内核中初始化函数的内容。
MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform")
.phys_io = APB_PHYS_BASE,
.boot_params = 0x00000100,
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
.map_io = pxa_map_io,
.init_irq = pxa910_init_irq,
.timer = &pxa910_timer,
.init_machine = ttc_dkb_init,
MACHINE_END
map_io 的入口是pxa_map_io函数 在common.c 文件中init。
init_irq 指向的函数是 pxa910_init_irq,其定义在pxa910.c和.h中。这个文件需要修改。主要定义的CPU interrupt,GPIO, Address等内容。
time.c 先不要改动。
然后进行编译,中间会出一些小错误,编译成功后,flash到版子上以后,可以启动,并可以看见trace的输出。
这说明板子的ARCH架构的移植基本上完成了。
然后看一下ttc_dkb.c的init函数:ttc_dkb_init(void)
static void __init ttc_dkb_init(void)
{
printk(KERN_NOTICE "<ttc_dkb.c>ttc_dkb_init(void) init ->start/n");
mfp_config(ARRAY_AND_SIZE(ttc_dkb_pin_config));
/* on-chip devices */
pxa910_add_uart(1);
pxa910_add_uart(2);
pxa910_add_uart(3);
//你可以在这里按照一定的顺序添加驱动程序 。
/* off-chip devices */
//platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices));
}
从这个函数开始初始化各种device drivers。
在ttc_dkb_init(void)中可以开始添加相关的设备驱动了。
我这里添加了pxa910_add_uart 2和3。 后面我们可以开始移植device driver了。