第12章uCLinux在UP-NETRARM3000平台上的移植.ppt
《第12章uCLinux在UP-NETRARM3000平台上的移植.ppt》由会员分享,可在线阅读,更多相关《第12章uCLinux在UP-NETRARM3000平台上的移植.ppt(63页珍藏版)》请在三一文库上搜索。
1、第12章 uCLinux在 UP-NETRARM3000平台 上的移植,uClinux源码下载方法和交叉编译工具的下载、生成方法。 内核源码的修改、剪裁和编译过程。 内核裁剪时的菜单选项的配置方法。 内核及根文件系统的烧写过程。,本章主要内容,第十二章目录,UP-NETARM3000嵌入式教学开发平台介绍 uClinux在UPNETARM300上的移植 Linux移植准备 关于交叉编译环境 修改uCLinux内核源码 Linux内核裁剪 内核的编译 内核及根文件系统的烧写 配置 minicom 烧写内核 烧写根文件系统,第十二章目录,UP-NETARM3000嵌入式教学开发平台介绍 uClin
2、ux在UPNETARM300上的移植 Linux移植准备 关于交叉编译环境 修改uCLinux内核源码 Linux内核裁剪 内核的编译 内核及根文件系统的烧写 配置 minicom 烧写内核 烧写根文件系统,第十二章 目录,UP-NETARM3000嵌入式教学开发平台介绍 uClinux在UPNETARM300上的移植 Linux移植准备 关于交叉编译环境 修改uCLinux内核源码 Linux内核裁剪 内核的编译 内核及根文件系统的烧写 配置 minicom 烧写内核 烧写根文件系统,在Linux环境下,本章主要介绍了uClinux在UP-NETARM3000平台的移植过程。 uClinux
3、源码下载方法和交叉编译工具的下载、生成方法。 内核源码的修改、剪裁和编译过程。 内核裁剪时的菜单选项的配置方法。 内核及根文件系统的烧写过程。,12.1 UP-NETARM3000嵌入 式教学开发平台介绍,UP-NETARM3000平台是博创兴业科技有限公司,依托北京航空航天大学开发的。适用于嵌入式教学和开发。 目前已应用于清华大学、北京航空航天大学等多所高校。 该平台是基于S3C44B0X 处理器,可以运行uC/OS-II和uClinux的系统。它由核心模块和扩展模块组成。,12.1 UP-NETARM3000嵌入 式教学开发平台介绍,核心模块包括S3C44B0X嵌入式芯片、2MB线性引导F
4、lash和8MB SDRAM; 扩展模块包括16MB非线性Flash、二个串口、一个USB口、一个JTAG通用接口、10M以太网口、触摸屏、17键键盘、320240STN彩色LCD、16M U盘、直流电机模块、步进电机模块、音频模块、CAN总线模块、A/D和D/A模块、LED显示器、IIC接口和FPGA模块。如图12-1所示。,图12-1 UPNETARM3000嵌入式教学开发平台,12.2uClinux在UPNETARM3000 上的移植,12.2.1 Linux移植准备,其基本内容是: 获取某一版本的Linux内核源码,根据具体目标平台对这源码进行必要的改写(主要是修改体系结构相关部分)。
5、 然后添加一些外设的驱动,打造一款适合于自己目标平台(可以是嵌入式便携设备也可以是其它体系结构的PC机)的新操作系统,对该系统进行针对目标平台的交叉编译,生成一个内核映象文件。 最后把该映象文件烧写(安装)到目标平台中。,12.2.1 Linux移植准备,基本过程如下(以Linux2.6.0为例): 1. 到ftp:/ftp.arm.linux.org.uk上下载Linux2.6.0内核及其关于 ARM平台的补丁(如:Patch-2.6.0-rmk1.gz)。 2. 给Linux2.6.0打补丁:zcat /patch-2.6.0-rmk1.gz | patch p1(前面/表示补丁文件放在内
6、核文件上一层目录)。 3. 准备交叉编译环境:交叉编译环境工具链一般包括binutils (含AS汇编器,LD链接器等),arm-gcc,glibc等。 4. 修改内核目录下的makefile文件,主要是以下几行:,12.2.1 Linux移植准备,注释掉ARCH:=$(shell uname m | sed e s/i.86/i386/-e s/sun4u/sparc64/ -e s/arm. */arm/ - e s/sa110/arm/)这一行; ARCH ? 改为 ARCH arm; CROSS_COMPILE ? = 改为 CROSS_COMPILE = 你的交叉编译工具中arm-l
7、inux所在目录/arm-linux-。 5此后就可以进行编译。,12.2.2 关于交叉编译环境,所谓的交叉编译就是:利用运行在某机器上的编译器编译某个源程序生成在另一台机器上运行的目标代码的过程。 主要用到的编译器是arm-gcc,它是gcc的arm改版。GCC输出的是汇编语言程序,如果我们想要进一步编译成我们想要的机器代码,则还需要汇编器的帮助。 GNU工具链中通常包含GNU Binutils,GNU GCC,GNU GLibc。Binutils中主要包含链接器ld和汇编器as。 GNU GLibc提供了一个C库,使得系统能完成基本的系统调用及其它的一些函数调用。,12.2.2 关于交叉编
8、译环境,下面介绍GCC交叉编译器的生成过程。步骤如下: (1)取得Binutils、GCC、Glibc的源码 可以到相关网站去获得,并把这三个文件解压到你自己的目录如:/toolchain/gcc, /toolchain/bu, /toolchain/glibc。 (2)配置并编译Binutils,得到汇编器和连接器 把Linux内核中GCC所必需的头文件拷到GCC可以找到的目录。如下操作: cp dr include/asm-arm /toolchain/gcc/arm-linux/include/asm cp dr include/linux /toolchain/gcc/arm-linu
9、x/include/linux 进入Binutils目录: ./configure -target=arm-linux-prefix=/toolchain/bu make LANGUAGES =”C” make install,12.2.2 关于交叉编译环境,(3)配置并编译GCC源代码,生成GCC编译器 进入gcc/config/arm目录 mv t-linux t-linux-orig /备份原来的t-linux文件 修改t-linux文件 把TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer fPIC改为: TARGET_LIBGCC2_CFLAGS
10、 = -fomit-frame-pointer -fPIC -Dinhibit_libc -D_gthr_posix_h (是行连接符号) 进入GCC安装目录进行编译 操作如下: ./configure -target=arm-linux -prefix=/toolchain/gcc -enable-languages=c -with-local-prefix=/toolchain/gcc/arm-linux ,12.2.2 关于交叉编译环境,-without-headers (不编译头文件) -with-newlib -disable-shared make make install (4)
11、配置Glibc编译生成Glibc的C函数库 CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib ./configure -host=arm-linux -prefix=/toolchain/gcc/arm-linux -enable-add-ons -with-headers=/toolchain/gcc /arm-linux/include make make install,12.2.2 关于交叉编译环境,(5)再次配置并编译GCC源代码,生成其它语言的编译器如:C等。 恢复t-linux 文件 cp /toolchian/gc
12、c/config/arm/t-linux-orig /toolchian/gcc/config/arm/t-linux 重新编译 ./configure -target=arm-linux -prefix=/toolchian/gcc -enable-languages=c,c+ -with-local-prefix=/toolchian/gcc /arm-linux make make install,12.2.3 修改ucLinux内核代码,主要主要包含启动代码的修改,内核的链接及装入,参数传递,内核引导几个部分。 (1)启动代码的修改 在ARM的子目录下可以找到一个boot目录,在boo
13、t下有一个init.S的文件。init.S是用ARM汇编写成的,它就是引导uCLinux内核在ARM平台上启动的初始化代码。 init.S定义了一个全局符号_start(默认的起始地址)。 同时init.S也是整体内核二进制镜像的起始标志。,12.2.3 修改ucLinux内核代码,init.S主要完成以下功能: 定义数据段、代码段、bbs(未初始化数据段)起始地址变量并对bbs段进行初始化。 设置寄存器以初始化系统硬件。 关闭中断。 初始化LCD显示。 将数据段数据复制到内存。 跳转到内核起始函数start_kernel继续执行。 对主寄存器的修改。,12.2.3 修改ucLinux内核代码
14、,(2)内核的链接及装入 内核可执行文件是由许多链接在一起的目标文件组成的。以ELF为例,ELF文件有text(文本段)、data(数据段)和bbs等组成。 这些段又由链接脚本(Linker description)负责链接装入。链接脚本又有输入文件和输出文件。 输出文件中输出段告诉链接器如何分配存储器。而输入文件的输入段则描述如何把输入文件与存储器映射。其形式如下:(输出文件) /* * linux/arch/arm/boot/compressed/vmlinux.lds.in * Copyright (C) 2000 Russell King * This program is free
15、software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */,OUTPUT_ARCH(arm) /输出为ARM格式 ENTRY(_start) /定义入口点 SECTIONS . = LOAD_ADDR; /“.”表示当前计数器 _load_addr = .; . = TEXT_START; /文本段起始 _text = .; .t
16、ext : /把各个输入文件中文本段合并到此 _start = .; *(.start) *(.text) *(.fixup) *(.gnu.warning) *(.rodata),*(.rodata.*) *(.glue_7) *(.glue_7t) input_data = .; arch/arm/boot/compressed/piggy.o input_data_end = .; . = ALIGN(4); _etext = .; /文本段结束(以下各段类似) _got_start = .; .got : *(.got) _got_end = .; .got.plt : *(.got.
17、plt) .data : *(.data) _edata = .;,. = BSS_START; _bss_start = .; .bss : *(.bss) _end = .; .stack (NOLOAD) : *(.stack) .stab 0 : *(.stab) .stabstr 0 : *(.stabstr) .stab.excl 0 : *(.stab.excl) .stab.exclstr 0 : *(.stab.exclstr) .stab.index 0 : *(.stab.index) .stab.indexstr 0 : *(.stab.indexstr) .comme
18、nt 0 : *(.comment) ,12.2.3 修改ucLinux内核代码,(3)参数传递 其中启动代码以参数形式把DRAM和Flash数量(指定系统中可用页面的数目和文件系统大小)等信息传给内核。 (4)内核引导 设置陷阱、初始化中断、初始化计时器和初始化控制台等一系列操作,并使内核正确启动。,12.2.4 ucLinux内核裁减,Linux内核的编译菜单都是通过Config.in经由不同脚本解释器产 生.config。它包括“make config”、“make menuconfig”和“make xconfig” 等版本。 “make config”以命令行方式进行配置 “make
19、 menuconfig”以菜单方式进行配置,且配置稳定可靠; “make xconfig”以基于图形库菜单方式进行配置,基于目前2.4.X版本的xconfig比较成熟稳定; 基于2.6.X的xconfig菜单结构清晰,界面友好,但不够稳定。,12.2.4 ucLinux内核裁减,我们以界面不够友好,但比较稳定的menuconfig为主进行介绍。在选择相应的配置时,有三种选择方式,它们分别代表的含义如下: Y :将该功能编译进内核 N :不将该功能编译进内核 M :将该功能编译成可以在需要时动态插入到内核 中的模块,12.2.4 ucLinux内核裁减,make xconfig使用鼠标选择对应的
20、选项。 make menuconfig使用空格键进行选取。 在每一个选项前的括号,可以是中括号、尖括号和圆括号。 中括号里要么是空,要么是“*”; 而尖括号里可以是空、“*”和“M”; 而圆括号的内容是在所提供的几个选项中选择一项。 其中空表示不将该功能编译进内核,“*”表示将该功能编译进内核,“M”表示将该功能编译成可以在需要时动态插入到内核中的模块 注意:其中有不少选项是目标板开发人员加的,对于陌生选项,自己不知道该选什么时建议使用默认值。,12.2.4 ucLinux内核裁减,1Code maturity level options 代码成熟度选项,它又有子项: (1) prompt f
21、or development and/or incomplete code/drivers 该选项是对那些还在测试阶段的代码、驱动模块等的支持。一般应该选这个选项,除非只是想使用LINUX中已经完全稳定的东西。但这样有时对系统性能影响挺大。 (2) prompt for obsolete code/drivers 该项用于对那些已经陈旧的被现有文件替代了的驱动程序和代码的支持,可以不选;除非你的机器配置比较旧,但那也会有不少问题。所以该项以基本不用,在新的版本中已被替换。,12.2.4 ucLinux内核裁减,2loadable module support 动态加载模块支持选项,其子项有:
22、(1) enable module support 支持模块加载功能,应该选上。 (2) set version information on all module symbols 该项用来支持跨内核版本的模块支持。即为某个版本的内核编译的模块可以在另一个版本的内核下使用,我们一般用不上,所以不选。 (3) kernel module loader 如果你启用这个选项,你可以通过kerneld程序的帮助在需要的时候自动载入或卸载那些可载入式的模块,我们一般会选上。,12.2.4 ucLinux内核裁减,3system type 系统类型,主要是CPU类型以及与此相关的内容。 如果你是进行交叉编
23、译,该项下的内容往往是经过相应目标平台开发人员修改的。主要是针对该平台的体系结构定义,这样可以优化系统性能。 如果你的内核版本支持你目标平台所用的CPU ,那你就选上它。但不要选同系列中高于你所用的CPU型号,否则不支持。也可以在Config.in或KConfig中修改该项以支持你的目标平台。 在UP-NETARM300/3000平台上你在该项上看到的是S3c44b0的ARM系列CPU。在UP-NETARM2410上看到的是S3C2410的ARM系列CPU 。其它选项是关于该芯片及平台的一些结构定义。其他版本内核遇到的不会是这种情况,但一般包含processor family选项,它让我们选择
24、CPU的类型,BIOS可以自检到,留意一下你的系统的启动信息。选上正确的CPU类型就行。,12.2.4 ucLinux内核裁减,4. General setup (1) support hot-plugable devieces 对可热拔插的设备的支持,看情况选择。若要对U盘等USB设备进行控制,建议选上。 (2) Networking support 网络支持,用到网络设备当然要选上。 (3) System V IPC 支持System V的进程间通讯,选上。 (4) sysctl support 该项支持在不重启情况下直接改变内核的参数。启用该选项后内核大约会增大8K,如果你的内存太小,就
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 uCLinux UP NETRARM3000 平台 移植
链接地址:https://www.31doc.com/p-2595401.html