《Linux在ARM上的移植》由会员分享,可在线阅读,更多相关《Linux在ARM上的移植(29页珍藏版)》请在金锄头文库上搜索。
1、 (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 Linux在ARM上的移植n n一、什么是移植?n n二、Linux内核代码n n三、Linux内核编译8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 一、一、什么是移植?什么是移植?n n移植就是让一个平台的代码能够在
2、其它平台上运行。n n将Linux运行在ARM上,即称为Linux在ARM上的移植。n n移植大致分3个层次:体系结构、处理器和板级移植。n n通常所说的移植指的是Linux内核移植,而不是发行版本的移植。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 一、一、什么是移植?什么是移植?n n将Linux移植到ARM的前提:熟悉Linux系统运行机理、熟悉Linux内核代码结构、掌握ARM体系结构、目标处理器、目标系统相
3、关、掌握GNU汇编和C编程以及Linux下脚本编程。n n通常仅需要作板级移植,有必要时进行处理器级移植。n n参考现有的移植。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核代码内核代码nLinux内核由进程管理、内存管理、文件系统、网络接口、进程间通信、设备驱动等模块组成。n nLinux内核代码包含这些目录:arch Documentation include kernel scr
4、ipts drivers init lib mmfs ipc net8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核代码内核代码n n/arch目录包含各体系结构特定的代码,如ARM、i386、PPC、MIPS等。*n n/Documentation目录存放相关说明文档。n n/include目录存放相关头文件。*n n/kernel目录包含Linux内核管理代码n n/srcipts目
5、录存放一些脚本文件n n/drivers目录包含Linux内核所有设备驱动8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核代码内核代码n n/init目录包含内核初始化代码n n/lib目录包含一些库文件n n/mm目录存放内存管理代码n n/fs目录存放所有文件系统代码n n/ipc目录存放进程间通信代码n n/net目录存放网络相关代码8/13/2024第页* (C)(C)版权所有版
6、权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核代码内核代码n n/arch目录包含各体系结构特定的代码,在每个体系结构目录下都有:boot 内核需要的特定平台代码kernel 体系结构特有的代码lib 通用函数在特定体系结构的实现math-emu 模拟FPU的代码,在ARM 中,使用mach-xxx代替*mm 特定体系结构的内存管理实现8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致
7、远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核代码内核代码n n/include目录存放体系结构特定的头文件,里面包含如asm-arm、asm-i386等目录,在其中才存放相关头文件。* 8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植Linux在ARM上的移植涉
8、及目录和文件n n/根目录:Makefile文件n n/arch/arm目录:Makefile、config.in文件n n/arch/arm/boot目录:Makefile文件n n/arch/arm/boot/compressed目录:Makefile、head-xxx.S文件8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植Linux在ARM上的移植涉及目录和文件n n/
9、arch/arm/kernel目录:Makefile、debug-armv.S、entry-armv.S、 n/arch/arm/mm目录:mm-armv.c文件n n其它目录如/arch/arm/def-configs目录,用于存放目标板的默认配置等。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n n/根目录Makefile文件 修改该修改该MakefileMakefi
10、le文件,文件,指定目标平台指定目标平台和和交叉编译器交叉编译器。指定ARCH=目标平台移植前:#ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)移植后:ARCH := arm8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n
11、n/根目录Makefile文件 指定交叉编译器:指定CROSS_COMPILE=交叉编译器移植前:CROSS_COMPILE = 移植后:CROSS_COMPILE = arm-linux-指定使用arm-linux-gcc交叉编译器8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n n/arch/arm目录Makefile文件 指定内核起始运行地址,和硬件相关。例如:ife
12、q ($(CONFIG_ARCH_xxx),y)TEXTADDR = 0xC0008000MACHINE = xxxendifCONFIG_ARCH_xxx在config.in中。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n n/arch/arm目录config.in文件 修改配置菜单,增加平台配置选项。choice ARM system type xxx-based
13、CONFIG_ARCH_xxx Shark CONFIG_ARCH_SHARK RiscPC8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植if $if $CONFIG_ARCH_xxxCONFIG_ARCH_xxx = y ; then = y ; thencomment xxx Implementationcomment xxx Implementationdep_boo
14、ldep_bool SMDK (MERI TECH BOARD) SMDK (MERI TECH BOARD) CONFIG_xxx_SMDKCONFIG_xxx_SMDK $ $CONFIG_ARCH_xxxCONFIG_ARCH_xxxfi fi # /* # /* CONFIG_ARCH_xxxCONFIG_ARCH_xxx */ */8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内
15、核移植内核移植n n还有其它配置选项,可以根据自己的需要进行添加或者修改,具体参考已经移植的代码。添加的信息将会在make menuconfig的菜单中出现。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n n/arch/arm/bootMakefile文件解压缩器从这里调用内核:ifeq ($(CONFIG_ARCH_xxx),y)ZTEXTADDR = 0xXXXX80
16、00EndifZTEXTADDR:解压缩器的起始地址.需要根据硬件进行设定。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n n/arch/arm/boothead-xxx.Sn n新增该文件,初始化处理器。编写这段代码需要非常熟悉处理器。源代码参考内核。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远
17、电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n n/arch/arm/boot/compressdMakefile文件增加head-xxx.S的编译。ifeq ($(CONFIG_ARCH_xxx),y)OBJS += head-xxx.oendif8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、Linux
18、Linux内核移植内核移植n n/arch/arm/kernel/arch/arm/kernelMakefileMakefile文件文件增加处理器和其它功能支持:增加处理器和其它功能支持:no-no-irqirq-arch := $(CONFIG_ARCH_INTEGRATOR) -arch := $(CONFIG_ARCH_INTEGRATOR) $(CONFIG_ARCH_CLPS711X) $(CONFIG_ARCH_CLPS711X) $(CONFIG_FOOTBRIDGE) $(CONFIG_FOOTBRIDGE) $(CONFIG_ARCH_EBSA110) $(CONFIG_AR
19、CH_EBSA110) $(CONFIG_ARCH_SA1100) $(CONFIG_ARCH_SA1100) $(CONFIG_ARCH_CAMELOT) $(CONFIG_ARCH_CAMELOT) $(CONFIG_ARCH_S3C2400) $(CONFIG_ARCH_S3C2400) $($(CONFIG_ARCH_xxxCONFIG_ARCH_xxx) ) 8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二
20、、二、LinuxLinux内核移植内核移植n n/arch/arm/kerneldebug-armv.S、entry-armv.S、setup.c增加代码,对芯片进行初始化和中断处理,以及体系结构相关初始化n n/arch/arm/mmmm-armv.c和平台相关的内存管理8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 二、二、LinuxLinux内核移植内核移植n n其它目录如/arch/arm/mach-xxx其它
21、文件和代码,请参考现成的移植。n n/driver目录板级移植时,一些必要的驱动程序如以太网等。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 三、三、LinuxLinux内核编译内核编译n n需要正确安装交叉编译器如arm-linux-gccn n相关命令make menuconfig菜单界面make dep依赖关系make zImage得到内核make mrproper干净的源码make distclean清除文件
22、8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 三、三、LinuxLinux内核编译内核编译n n进入配置菜单/界面make config文本界面make menuconfig菜单界面*makexconfig图形界面常用make menuconfig命令进行。进入Linux内核源代码目录,执行该命令,得到Linux内核配置主界面。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公
23、司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 三、三、LinuxLinux内核编译内核编译n n对各项进行配置,包括系统类型、存储器、网络等。可以装载某开发板的默认配置,如MagicARM2410默认配置文件为ZY2410x。 8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 三、三、LinuxLinux内核编译内核编译n n装载默
24、认配置后,可修改或者不修改。配置完毕选择退出并保存。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 三、三、LinuxLinux内核编译内核编译n n配置完毕,需要先建立依赖关系:make depn n如果没有错误,即可编译内核:make zImage如果编译无错,在arch/arm/boot目录下将生成内核文件zImage。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广
25、州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 三、三、LinuxLinux内核编译内核编译n n如果配置中有编译为模块的,需要:make modulesmake modules_installn n如果有错,请进行排错后再次编译。n n重新编译之前,可使用make mrproper命令得到干净的源代码或者使用make distclean清除以前编译产生的文件,然后才重新进行。8/13/2024第页* (C)(C)版权所有版权所有版权所有版权所有 广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司广州致远电子有限公司LinuxLinuxLinuxLinux操作系统操作系统操作系统操作系统 8/13/2024第页*