您的位置 首页 测评

浅谈剖析Arm linux 内核移植及体系初始化的进程一

学习嵌入式ARMlinux,主要想必三个方向发展:1、嵌入式linux应用软件开发2、linux内核的剪裁和移植3、嵌入式linux底层驱动的开发主要介绍…

学习嵌入式ARMlinux,首要想必三个方向开展:

1、嵌入式linux使用软件开发
2、linux内核的取舍和移植
3、嵌入式linux底层驱动的开发
主 要介绍内核移植进程中触及文件的散布及其用处,以及简略介绍体系的初始化进程。整个armlinux内核的发动可分为三个阶段:第一阶段首要是进行 cpu和体系结构的查看、cpu自身的初始化以及页表的建立等;第二阶段首要是对体系中的一些基础设施进行初始化;最终则是更高层次的初始化,如根设备和 外部设备的初始化。了解体系的初始化进程,有益于更好地移植内核。
1. 内核移植

2. 触及文件散布介绍
2.1. 内核移植

2.2. 触及的头文件
/linux-2.6.18.8/include
[root@localhostinclude]#tree-L1
.
|–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@localhostarm]#tree-L1
.
|–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@localhosttools]#tree-L1
.
|–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@localhostcompressed]#tree-L1
.
|–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@localhostkernel]#tree-L1
.
|–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@localhostinit]#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@localhostmach-s3c2410]#tree-L1
.
|–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中完成。最终以nandflash为例详细介绍。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/277388.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部