您的位置:首页 > 运维架构 > Linux

浅谈分析Arm linux 内核移植及系统初始化的过程(一)

2010-08-31 16:49 555 查看
浅谈分析Arm linux 内核移植及系统初始化的过程(一)

学习嵌入式ARM

linux

,主要想必三个方向发展:

1

、嵌入式
linux

应用软件开发

2


linux

内核的剪裁和移植

3

、嵌入式
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

2
浅谈分析Arm linux 内核移植及系统初始化的过程
|-- 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的末尾处 #i
nclude "head-common.S"。 经过一系列的初始化后,跳转到linux-2.6.18.8/init/main.c中的
start_kernel()函数中,开始内核的基本初始化过程。

/linux-2.6.18.8/init

[root@localhost init]# tree

.

|-- Kconfig

|-- Makefile

|-- calibrate.c

|-- do_mounts.c

|-- do_mounts.h

|-- do_mounts_initrd.c

|-- do_mounts_md.c

|-- do_mounts_rd.c

|-- initramfs.c

|-- main.c

`-- version.c

(4)

/linux-2.6.18.8/arch/arm/mach-s3c2410

[root@localhost mach-s3c2410]# tree -L 1

.

|-- Kconfig

|-- Makefile

|-- Makefile.boot

|-- bast-irq.c

|-- bast.h

|-- clock.c

|-- clock.h

|-- common-smdk.c

|-- common-smdk.h

|-- cpu.c

|-- cpu.h

|-- devs.c

|-- devs.h

|-- dma.c

|-- gpio.c

|-- irq.c

|-- irq.h

|-- mach-anubis.c

|-- mach-smdk2410.c

|-- pm-simtec.c

|-- pm.c

|-- pm.h

|-- s3c2400-gpio.c

|-- s3c2400.h

|-- s3c2410-clock.c

|-- s3c2410-gpio.c

|-- s3c2410.c

|-- s3c2410.h

|-- sleep.S

|-- time.c

|-- usb-simtec.c

`-- usb-simtec.h

这个目录中的文件都是板级相关的,其中比较重要是如下几个:

linux/arch/arm/mach-s3c2410/cpu.c

linux/arch/arm/mach-s3c2410/common-smdk.c

linux/arch/arm/mach-s3c2410/devs.c

linux/arch/arm/mach-s3c2410/mach-smdk2410.c

linux/arch/arm/mach-s3c2410/Makefile.boot

linux/arch/arm/mach-s3c2410/s3c2410.c

3. 处理器和设备4.

这里主要介绍处理器和设备的描述和操作过程。设备描述在linux/arch/arm/mach-s3c2410/devs.c和linux/arch/arm/mach-s3c2410/common-smdk.c中实现。最后以nand flash为例具体介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: