学习嵌入式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