免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1123 | 回复: 0
打印 上一主题 下一主题

arm linux板级移植 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览

linux标准内核已经支持很多芯片,包括常见的s3c**系列,这些芯片的移植比较而言,还是很容易的,只需要修改少量地方就可以。

今天我想讨论的是linux内核完全不支持的芯片板级移植方法。

  bootloader部分暂不讨论,假定已经没有问题。只说内核部分。

  首先,bootloader启动后会给内核传递一系列参数,如command string等,这启动有个比较重要的参数是系统的架构号,也就是内核中的machine type。这个变量一定要与内核中定义的架构保持一致,否则会导致内核无法引导。查看bootloader输出的machine type方法是,进入u-boot,输入bdinfo命令,可以显示机器号。然后对照arch/arm/tools/machine_type中定义的j机器号。

  除了机器号,bootloader还会传给内核串口输出参数。如果内核引导时,串口没有输出,这也是一个需要注意的地方。如果使用的是u-boot的话,可以用#printenv来查看传递的参数。

  接下来就是内核本身的设置内容了。

  1。内核要启动首先就要有时钟。所以首先就得把时钟初始化。这个工作一般是在初始化定时器的时候做的,因为系统时钟使用的是定时器中的一个。具体是哪个,要看芯片手册。

 2。串口是内核此时跟外界沟通的重要渠道,所以这时候首先就要把串口的初始化工作做好。

 3。除了以上2件事外,我们要做的还有memory map的内存映射问题。它实现的是给外设分配一段内存空间,作为地址映射用。方法是填充每个外设的map_desc结构体,主要是其基地址和分配的地址空间大小。

 4。接下来我们要实现中断号的分配,及中断处理函数的设置。

  以上工作的实现都是在一个描述芯片的宏里定义的。MACHINE_START开始,MACHINE_END结束。

  1. MACHINE_START(xx, "xx")

  2. .phys_io = XX_UART_BASE & 0xfff00000,

  3. .io_pg_offst = (IO_ADDRESS(XX_UART_BASE) >> 18) & 0xfffc,

  4. .boot_params = PHYS_OFFSET+0x100,

  5. .map_io = xx_board_map_io,

  6. .init_irq = xx_init_irq,

  7. .init_machine = xx_board_init,

  8. .timer = &xx_timer,

  9. MACHINE_END

好了,完成以上工作之后,芯片的板级移植就算完成了一个框架,要想内核完全跑起来,还要添加其它驱动,比如flash, watchdog等。

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP