免费注册 查看新帖 |

Chinaunix

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

Arm linux 内核移植及系统初始化过程分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-06 15:03 |只看该作者 |倒序浏览
Arm linux 内核移植及系统初始化过程分析



本文主要介绍内核移植过程中涉及文件的分布及其用途,以及简单介绍系统的初始化过程。整个arm linux内核的启动可分为三个阶段:第一阶段主要是进行cpu和体系结构的检查、cpu本身的初始化以及页表的建立等;第二阶段主要是对系统中的一些基础设施进行初始化;最后则是更高层次的初始化,如根设备和外部设备的初始化。了解系统的初始化过程,有益于更好地移植内核。

1.        内核移植2.        涉及文件分布介绍
2.1.        内核移植2.2.        涉及的头文件
/linux-2.6.18.8/include
[root@localhost include]# tree -L 1
.
|-- Kbuild
|-- acpi
|-- asm -> asm-arm
|-- asm-alpha
|-- asm-arm   ------------------------------->(1)
|-- asm-sparc
|-- asm-sparc64
|-- config
|-- keys
|-- linux                ------------------------------->(2)
|-- math-emu
|-- media
|-- mtd
|-- net
|-- pcmcia
|-- rdma
|-- rxrpc
|-- scsi
|-- sound
`-- video

内核移植过程中涉及到的头文件包括处理器相关的头文件(1)和处理器无关的头文件(2)。

2.3.        内核移植2.4.        涉及的源文件
/linux-2.6.18.8/arch/arm
[root@localhost arm]# tree -L 1
.
|-- Kconfig
|-- Kconfig-nommu
|-- Kconfig.debug
|-- Makefile
|-- boot  ------------------------------->(2)
|-- common
|-- configs
|-- kernel  ------------------------------->(3)
|-- lib
|-- mach-at91rm9200
……
|-- mach-omap1
|-- mach-omap2
|-- mach-realview
|-- mach-rpc
|-- mach-s3c2410   ------------------------------->(4)
|-- mach-sa1100
|-- mach-versatile
|-- mm    ------------------------------->(5)
|-- nwfpe
|-- oprofile
|-- plat-omap
|-- tools    ------------------------------->(1)
`-- vfp

(1)
/linux-2.6.18.8/arch/arm/tools
[root@localhost tools]# tree -L 1
.
|-- Makefile
|-- gen-mach-types
`-- mach-types

Mach-types 文件定义了不同系统平台的系统平台号。移植linux内核到新的平台上需要对新的平台登记系统平台号。

Mach-types文件格式如下:
# machine_is_xxx        CONFIG_xxxx                MACH_TYPE_xxx                number
s3c2410                ARCH_S3C2410                S3C2410                                 182
smdk2410                ARCH_SMDK2410        SMDK2410                           193

之所以需要这些信息,是因为脚本文件linux/arch/arm/tools/gen-mach-types需要linux/arch/tools/mach-types来产生linux/include/asm-arm/mach-types.h文件,该文件中设置了一些宏定义,需要这些宏定义来为目标系统选择合适的代码。

(2)
linux-2.6.18.8/arch/arm/boot/compressed
[root@localhost compressed]# tree -L 1
.
|-- Makefile
|-- Makefile.debug
|-- big-endian.S
|-- head-at91rm9200.S
|-- head.S
|-- ll_char_wr.S
|-- misc.c
|-- ofw-shark.c
|-- piggy.S
`-- vmlinux.lds.in

Head.s 是内核映像的入口代码,是自引导程序。自引导程序包含一些初始化程序,这些程序都是体系结构相关的。在对系统作完初始化设置工作后,调用misc.c文件中的decompress_kernel()函数解压缩内核映像到指定的位置,然后跳转到kernel的入口地址。

Vmlinux.lds.in用来生成内核映像的内存配置文件。

(3)
linux-2.6.18.8/arch/arm/kernel
[root@localhost kernel]# tree -L 1
.
|-- Makefile
|-- apm.c
|-- armksyms.c
|-- arthur.c
|-- asm-offsets.c
|-- bios32.c
|-- calls.S
|-- dma.c
|-- ecard.c
|-- entry-armv.S
|-- entry-common.S
|-- entry-header.S
|-- fiq.c
|-- head-common.S
|-- head-nommu.S
|-- head.S
|-- init_task.c
|-- io.c
|-- irq.c
|-- isa.c
|-- module.c
|-- process.c
|-- ptrace.c
|-- ptrace.h
|-- semaphore.c
|-- setup.c
|-- smp.c
|-- sys_arm.c
|-- time.c
|-- traps.c
`-- vmlinux.lds.S

内核入口处也是由一段汇编语言实现的,由head.s和head-common.s两个文件组成。
Head.s 是内核的入口文件, 在head.s的末尾处 #include "head-common.S"。 经过一系列的初始化后,跳转到linux-2.6.18.8/init/main.c中的start_kernel()函数中,开始内核的基本初始化过程。

论坛徽章:
0
2 [报告]
发表于 2009-01-06 20:47 |只看该作者

回复 #1 gjygjuy 的帖子

LZ发到嵌入式板块更好

论坛徽章:
0
3 [报告]
发表于 2009-01-06 23:52 |只看该作者
设计到真正移植的部分很少。
最好能重点介绍一下应该关注哪些地址?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP