嵌入式Linux操作系统移植共27页文档
- 格式:ppt
- 大小:2.57 MB
- 文档页数:27
嵌入式μCLinux系统移植XX:1007-9416(20XX)04-0086-01嵌入式Linux系统在开发过程中需要对Linux内核进行重新定制,所以熟悉内核配置、编译和移植是非常重要的。
掌握一定的Linux内核的内容,是对Linux进行手动内核移植前必须要做的。
1 Linux内核移植Linux内核移植,通俗讲马上内核由一种硬件平台移植到另一种硬件平台上运行的方式。
虽然大部分的处理器和硬件平台,嵌入式Linux系统都可以支持,但最好还是以自己定制的硬件板为主,移植工作也可通过硬件平台的变化进行调整。
本文以Linux2.6.32.4版本内核为例,过程是如何将其移植到RM内核S3C2440处理器上,该处理器是Smsung公司出产的。
1.1 内核修改(1)解压内核源码。
加压命令:tr jxvf linux-2.6.32.4.tr.bz2。
(2)修改Mkefile。
Mkefile是贯穿整Linux内核的生命线,并以此完成编译和链接。
具体过程为:内核源码目录――进入一级目录(通过编译工具)――找到Mkefile文件――修改相关变量。
(3)修改目标板输入时钟。
内核源目录――找到文件rch/rm/mch-s3c2440/mch-smdk2440.c并打开(通过编译工具)――找到函数mini2440_mp_io(void)的实现代码:s3c24xx_init_clocks(12000000)。
此代码单位是Hz,是目标板中处理器晶振的频率的意思。
依照目标板实际晶振震荡器的大小进行修改,本文以12MHz晶振为例。
(4)修改MTD分区。
MTD驱动程序在Linux下,其接口分为用户模块和硬件模块两种。
将MTD子系统编译到内核中,是为了访问特定的闪存设备,并在它上面放置文件系统,这包括选择适当的MTD硬件和用户模块。
MTD子系统就目前而言,支持绝大多数的闪存设备,且不断的有更多的驱动程序添加进来,以用于不同的闪存芯片。
第节绪沦内核精小、效率高,并且具有,:百度的模块化和扩一展性:具备文件和日录针理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(A川),开发应用程序简单;嵌入式应用软件丰富。
第四阶段是以基于Internet为标志的嵌入式系统,这是一个正在迅速发展的阶段。
目前大多数嵌入式系统还孤立于Internet之外,但随着工nternet的发展以及工nternet技术与信息、家电、工业控制技术等结合日益密切,嵌入式设备与InteI'net的结合将代表着嵌入式技术的真正未来。
妇.2嵌入式操作系统的主要特点随着嵌入式系统的不断发展,可以看到嵌入式操作系统在嵌入式系统中的作用日显重要,它可以为嵌入式系统开发人员提供一个基本的软件开发和运行的支撑平台,从而大大减少了复杂嵌入式系统的开发难度和开发周期,增强了系统的稳定性,降低开发和维护成本。
本论文的工作也是针对特定的嵌入式通用操作系统一嵌入式L1nux展开的,故我们首先对嵌入式操作系统作进一步的阐述。
嵌入式操作系统并不是简单嵌入的操作系统,它与通常意义上的操作系统有一定的区别。
嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、调度工作,控制协调并发活动,它必须体现所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。
根据各文献的描述,嵌入式操作系统具有如下一些特征: 1.小巧。
一般嵌入式系统所能够提供的资源有限,所以嵌入式操作系统必须做到小巧以满足嵌入式系统硬件的限制。
2.实时性。
据统计,有许多嵌入式系统工作在实时性要求很高的环境中,这就要求嵌入式操作系统必须将实时性作为一个重要的指标来考虑。
在信息时代, 人们必须在有效的时间内对收到的信息进行处理,从而为进一步的决策分析争取时间如GSI客户端的信息处理。
所以,嵌入式操作系统必须体现一定的实时性。
3.可定制性。
由于嵌入式系统需要根据应用的要求进定制,所以嵌入式操作系统也必须能够根据应用的要求进行定制,去掉多余的部分,或者简化相应的模块。
AT91SAM9G20EK开发板Linux移植文档Ver 1.0目录:1.准备所需要的软件和编译工具包2.安装ARM-LINUX-GCC工具链3.安装编译AT91BootStrap Bootloader 4.安装编译Uboot及AT91-Uboot补丁5.安装编译Linux2.6.22及AT91-Linux补丁 6.安装下载工具AT91ISP及烧写文件 7.NFS根文件系统的建立8.移植Boa Web服务器9.移植网络摄像头10.移植Madplay音频播放器11.ARM MPlayer移植12.AT91SAM芯片的启动过程附录1:安装VMWARE+READHAT9环境附录2:如何安装虚拟工具和网络设置准备所需要的软件和编译工具包1.At91bootstrap Bootloader软件包Bootstrap.tar.gz光盘位置:/linux/该压缩文件为AT91SAM9的第二级BootLoader源代码。
2.Uboot以及补丁u-boot-1.1.7.tar.bz2 u-boot-1.1.5_atmel_1.7.diff光盘位置:/linux/3.Linux2.6.27源码包linux-2.6.27.tar.gz光盘位置:/linux/4.ARM-LINUX-GCC交叉工具链arm-linux-gcc-3.4.1/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2arm-linux-gcc-3.3.2/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2007q1-10-arm-none-linux -gnueabi-i686-pc-linux-gnu.tar.bz2光盘位置:/linux/toolchain/安装GNU ARM-LINUX-GCC交叉编译工具链解压缩工具链压缩包:arm-linux-gcc-3.4.1.tar.bz2arm-linux-gcc-3.3.2.tar.bz2arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2#cd /usr/loacal/arm/toolchain#tar xvjf arm-linux-gcc-3.4.1.tar.bz2#tar xvjf arm-linux-gcc-3.3.2.tar.bz2#tar xvjf arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2设置编译器默认路径:打开/etc/bashrc文件,在文件最后添加export PATH=:$PATH:/usr/local/arm/toolchain/arm-2007q1/binexport PATH=:$PATH:/usr/local/arm/toolchain/arm-softfloat-linux-gnu/bin export PATH=:$PATH:/usr/local/arm/toolchain/3.4.1/bin保存退出,在终端里运行:#source bashrc重新加载环境变量,然后测试交叉编译工具链是否能被正确引用:#arm-linux-gcc –v#arm-none-linux-gnueabi-gcc –v#arm-softfloat-linux-gnu-gcc -v出现版本信息提示表示安装成功。
嵌入式Linux内核移植一、基于ARM的硬件BOOT程序的基本设计1.实验步骤本实验仅使用实验教学系统的CPU板。
在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
基于ARM芯片的应用系统,多数为复杂的片上系统,该复杂系统里,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状态,因此在用户的应用程序之前,需要由专门的一段代码来完成对系统基本的初始化工作。
由于此类代码直接面对处理器内核和硬件控制器进行编程,故一般均用汇编语言实现。
系统的基本初始化内容一般包括:(1)分配中断向量表(2)初始化存储器系统(3)初始化各工作模式的堆栈(4)初始化有特殊要求的硬件模块(5)初始化用户程序的执行环境(6)切换处理器的工作模式(7)呼叫主应用程序二、开发环境搭建实验1.实验原理绝大多数的Linux 软件开发都是以native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。
这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板上系统)运行开发工具和调试工具。
通常嵌入式系统软件的开发采用交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台PC 机)上,对应的开发板叫做目标板。
开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行。
)然后把可执行文件下载到目标机上运行。
调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。
宿主机和目标板的处理器一般都不相同,宿主机为PXA270。
GNU 编译器提供这样的功能,在编译编译器时,可以选择开发所需的宿主机和目标机从而建立开发环境。
所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC 机作宿主开发机,对于嵌入式Linux,宿主机上的操作系统一般要求为Redhat Linux,在此,推荐使用Redhat 9.0 作为宿主机(开发主机)的操作系统。
嵌入式linux操作系统移植嵌入式Linux操作系统移植是一个广泛应用的开发任务,主要用于将Linux操作系统移植到特定的嵌入式设备上。
在嵌入式系统开发中,这种移植可以帮助开发者在一个有限资源环境中实现更高效、更可靠的运行。
嵌入式Linux操作系统有许多优势。
它是一个开源项目,有着广泛的开发者和社区支持。
这意味着有大量的资源和文档可供参考,有利于降低开发难度和成本。
Linux具有良好的稳定性和可靠性,能在各种硬件平台上运行。
嵌入式Linux可以提供类似PC的环境,但需要的资源更少,效率更高。
需要选择一个适合设备硬件平台和应用程序需求的Linux内核版本。
这可能包括ARM、MIPS或其他架构。
选择后,下载并解压相应的内核源代码。
配置内核是移植过程中的关键步骤。
通过make menuconfig或make config命令,可以针对特定硬件平台和应用程序需求进行配置。
这包括处理器类型、内存大小、设备驱动、文件系统等。
针对硬件平台编写或修改设备驱动程序,以确保Linux内核能正确识别和访问设备。
这通常需要了解硬件的工作原理和Linux驱动程序开发的相关知识。
使用make命令编译内核和设备驱动程序。
成功后,生成可烧录到设备上的映像文件(如zImage或initramfs)。
将映像文件烧录到目标设备并启动。
嵌入式Linux操作系统的移植是一项复杂的任务,需要深入了解硬件平台、操作系统和驱动程序开发的知识。
还需要注意以下几点:有限的资源:嵌入式设备的资源通常比PC少得多,如RAM、Flash等。
这需要在移植过程中优化资源的使用。
硬件兼容性:确保选择的Linux内核版本与目标设备的硬件兼容。
如果不兼容,可能会导致系统运行不稳定或无法运行。
驱动程序稳定性:设备驱动程序的稳定性直接影响到整个系统的稳定性和可靠性。
在编写或修改驱动程序时,需要进行充分的测试和验证。
网络安全性:嵌入式系统通常具有网络连接功能,因此需要考虑网络安全问题。
Linux系统移植目录第一部分前言 (8)1硬件环境 (8)1.1主机硬件环境 (8)1.2目标板硬件环境 (8)1.3工具介绍 (8)2软件环境 (8)2.1主机软件环境 (8)2.1.1Windows操作系统 (8)2.1.2Linux操作系统 (8)2.1.3目标板最后运行的环境 (9)2.2Linux下工作用户及环境 (9)2.2.1交叉工具的安装 (9)2.2.2uboot移植工作目录 (9)2.2.3内核及应用程序移植工作 (9)2.3配置系统服务 (10)2.3.1tftp服务器的配置 (10)2.4工具使用 (12)2.4.1minicom的使用 (12)3作者介绍 (13)3.1策划,组织,指导,发布者 (13)3.2ADS bootloader部分 (13)3.3交叉工具部分 (13)3.4uboot部分 (13)3.5内核部分 (13)3.6应用程序部分 (13)3.7网卡驱动部分 (13)3.8Nand Flash驱动部分 (13)1.1.1armasm (14)1.1.2armcc,armcpp (14)1.1.3armlink (14)2基本原理 (15)2.1可执行文件组成及内存映射 (15)2.1.1可执行文件的组成 (15)2.1.2装载过程 (16)2.1.3启动过程的汇编部分 (17)2.1.4启动过程的C部分 (17)3AXD的使用以及源代码说明 (18)3.1源代码说明 (18)3.1.1汇编源代码说明 (18)3.1.2C语言源代码说明 (23)3.1.3源代码下载 (23)3.2AXD的使用 (23)3.2.1配置仿真器 (23)3.2.2启动AXD配置开发板 (23)第三部分 GNU交叉工具链 (25)1设置环境变量,准备源码及相关补丁 (25)1.1设置环境变量 (25)1.2准备源码包 (25)1.2.1binuils (25)1.2.2gcc (25)1.2.3glibc (25)1.2.4linux kernel (26)1.3准备补丁 (26)1.3.1ioperm.c.diff (26)1.3.2flow.c.diff (26)1.3.3tlinux.diff (26)1.4编译 GNU binutils (26)1.5准备内核头文件 (26)1.5.1使用当前平台的gcc编译内核头文件 (26)1.5.2复制内核头文件 (27)1.6译编glibc头文件 (27)1.7编译gcc第一阶段 (27)1.8编译完整的glibc (27)1.9编译完整的gcc (28)2GNU交叉工具链的下载 (28)2.1ARM官方网站 (28)2.2本文档提供的下载 (28)3GNU交叉工具链的介绍与使用 (29)3.1常用工具介绍 (29)3.2.1armlinuxgcc的使用 (29)3.2.2armlinuxar和armlinuxranlib的使用 (30)3.2.3armlinuxobjdump的使用 (30)3.2.4armlinuxreadelf的使用 (31)3.2.6armlinuxcopydump的使用 (32)4ARM GNU常用汇编语言介绍 (32)4.2ARM GNU专有符号 (33)4.3操作码 (33)5可执行生成说明 (33)5.1lds文件说明 (33)5.1.1主要符号说明 (33)5.1.2段定义说明 (34)第四部分uboot的移植 (35)1uboot的介绍及系统结构 (35)1.1uboot介绍 (35)1.2获取uboot (35)1.3uboot体系结构 (35)1.3.1uboot目录结构 (35)2uboot的启动过程及工作原理 (36)2.1启动模式介绍 (36)2.2阶段1介绍 (36)2.2.1定义入口 (36)2.2.2设置异常向量 (37)2.2.3设置CPU的模式为SVC模式 (37)2.2.4关闭看门狗 (37)2.2.5禁掉所有中断 (37)2.2.6设置以CPU的频率 (37)2.2.7设置CP15 (37)2.2.8配置内存区控制寄存器 (38)2.2.9安装UBOOT使的栈空间 (38)2.2.10BSS段清0 (38)2.2.11搬移Nand Flash代码 (39)2.2.12进入C代码部分 (39)2.3阶段2的C语言代码部分 (39)2.3.1调用一系列的初始化函数 (39)2.3.2初始化网络设备 (41)2.3.3进入主UBOOT命令行 (41)2.4代码搬运 (41)3uboot的移植过程 (42)3.1环境 (42)3.2步骤 (42)3.2.1修改Makefile (42)3.2.2在board子目录中建立crane2410 (42)3.2.3在include/configs/中建立配置头文件 (42)3.2.4指定交叉编译工具的路径 (42)3.2.5测试编译能否成功 (42)3.2.9UBOOT的Nand Flash移植 (45)3.2.8重新编译uboot (45)3.2.9把uboot烧入flash (45)4UBOOT命令的使用 (46)4.1UBOOT命令的介绍 (46)4.1.1获得帮助信息 (46)4.2常用命令使用说明 (47)4.2.1askenv(F) (47)4.2.2autoscr (47)4.2.3base (47)4.2.4bdinfo (47)4.2.5bootp (47)4.2.8tftp(tftpboot) (48)4.2.9bootm (48)4.2.10go (48)4.2.11cmp (48)4.2.12coninfo (48)4.2.13cp (48)4.2.14date (49)4.2.15erase(F) (49)4.2.16flinfo(F) (49)4.2.17iminfo (49)4.2.18loadb (49)4.2.19md (49)4.2.20mm (50)4.2.21mtest (50)4.2.22mw (50)4.2.23nm (50)4.2.24printenv (50)4.2.25ping (51)4.2.26reset (51)4.2.27run (51)4.2.28saveenv(F) (51)4.2.29setenv (51)4.2.30sleep (51)4.2.31version (51)4.2.32nand info (51)4.2.33nand device<n> (51)4.2.34nand bad (51)4.2.35nand read (52)4.2.36nand erease (52)4.2.37nand write (52)4.5下载提供 (53)5参考资料 (53)第五部分 linux2.6内核的移植 (53)1内核移植过程 (53)1.1下载linux内核 (53)1.2修改Makefile (53)1.3设置flash分区 (54)1.3.1指明分区信息 (54)1.3.2指定启动时初始化 (56)1.3.3禁止Flash ECC校验 (56)1.4配置内核 (56)1.4.1支持启动时挂载devfs (56)1.4.2配置内核产生.config文件 (57)1.4.3编译内核 (58)1.4.4下载zImage到开发板 (58)2创建uImage (61)2.1相关技术背景介绍 (61)2.2在内核中创建uImage的方法 (61)2.2.1获取mkimage工具 (61)2.2.2修改内核的Makefile文件 (61)3追加实验记录 (62)3.1移植linux2.6.15.7 (62)3.2移植linux2.6.16.21 (62)3.3移植linux2.6.17 (62)4参考资料 (62)第六部分应用程序的移植 (63)1构造目标板的根目录及文件系统 (63)1.1建立一个目标板的空根目录 (63)1.2在my_rootfs中建立Linux目录树 (63)1.3创建linuxrc文件 (63)2移植Busybox (64)2.1下载busybox (64)2.3编译并安装Busybox (65)3移植TinyLogin (66)3.1下载 (66)3.2修改tinyLogin的Makefile (66)3.3编译并安装 (66)4相关配置文件的创建 (66)4.1创建帐号及密码文件 (66)4.5创建inetd.conf配置文件 (67)5移植inetd (67)5.1inetd的选择及获取 (67)5.1.1获取inetd (67)5.2编译inetd (67)5.2.1修改configure文件 (67)5.2.2编译 (68)5.3配置inetd (68)5.3.1拷贝inetd到根文件系统的usr/sbin目录中 (68)6移植thttpd Web服务器 (69)6.1下载 (69)6.2编译thttpd (69)6.3配置 (69)6.3.1拷贝thttpd二进制可执行文件到根文件系统/usr/sbin/目录中 (69)6.3.2修改thttpd配置文件 (69)6.3.3转移到根文件系统目录,创建相应的文件 (69)7建立根目录文件系统包 (70)7.1建立CRAMFS包 (70)7.1.1下载cramfs工具 (70)7.1.2制作cramfs包 (70)7.1.3写cramfs包到Nand Flash (70)8参考资料 (70)第七部分 Nand flash驱动的编写与移植 (71)1Nand flash工作原理 (71)1.1Nand flash芯片工作原理 (71)1.1.1芯片内部存储布局及存储操作特点 (71)1.1.2重要芯片引脚功能 (71)1.1.3寻址方式 (71)1.1.4Nand flash主要内设命令详细介绍 (72)1.2Nand Flash控制器工作原理 (72)1.2.1Nand Flash控制器特性 (72)1.2.2Nand Flash控制器工作原理 (72)1.3Nand flash控制器中特殊功能寄存器详细介绍 (72)1.4Nand Flash控制器中的硬件ECC介绍 (73)1.4.1ECC产生方法 (73)1.4.2ECC生成器工作过程 (74)1.4.3ECC的运用 (74)2在ADS下flash烧写程序 (74)2.1ADS下flash烧写程序原理及结构 (74)2.1.1特殊功能寄存器定义 (74)2.1.2操作的函数实现 (74)2.3第二层实现说明 (75)2.3.1Nand Flash初始化 (75)2.3.3获取Nand flash ID (75)2.3.4Nand flash写入 (76)2.3.5Nand flash读取 (77)2.3.6Nand flash标记坏块 (78)2.3.7Nand Flash检查坏块 (79)2.3.8擦除指定块中数据 (79)2.4第一层的实现 (80)3在UBOOT对Nand Flash的支持 (82)3.1UBOOT对从Nand Flash启动的支持 (82)3.1.1从Nand Flash启动UBOOT的基本原理 (82)3.1.2支持Nand Flash启动代码说明 (82)3.2UBOOT对Nand Flash命令的支持 (84)3.2.1主要数据结构介绍 (84)3.2.2支持的命令函数说明 (85)4在Linux对Nand Flash的支持 (87)4.1Linux下Nand Flash调用关系 (87)4.1.1Nand Flash设备添加时数据结构包含关系 (87)4.1.2Nand Flash设备注册时数据结构包含关系 (87)4.2Linux下Nand Flash驱动主要数据结构说明 (88)4.2.1s3c2410专有数据结构 (88)4.2.2Linux通用数据结构说明 (89)4.3.1注册driver_register (94)4.3.2探测设备probe (94)4.3.3初始化Nand Flash控制器 (94)4.3.4移除设备 (94)4.3.5Nand Flash芯片初始化 (94)4.3.6读Nand Flash (95)4.3.7写Nand Flash (95)第八部分 Cs8900a网卡驱动的编写与移植 (95)1Cs8900a工作原理 (95)2在ADS下cs8900a的实现 (95)2.1在cs8900a下实现的ping工具 (95)3在uboot下cs8900a的支持 (96)3.1uboot下cs8900a的驱动介绍 (96)3.2uboot下cs8900a的移植说明 (96)4.2Linux下cs8900a的移植说明 (96)4.2.1为cs8900a建立编译菜单 (96)4.2.2修改S3C2410相关信息 (97)序该文档的目的是总结我们在工作中的一些经验,并把它们分享给喜欢ARM和Linux的朋友, 如有错误之处,请大家多多指点. 同样, 我们也希望更多人能把自己的工作经验和体会加入该文档,让大家共同进步.该文档是一份交流性文档, 只供个人学习与交流,不允许公司和企业用于商业行为.第一部分前言1 硬件环境1.1 主机硬件环境开发机:Pentium-4 CPU内存: 512MB 硬盘: 60GB1.2 目标板硬件环境CPU: S3C2410SDRAM: HY57V561620Nand flash: K9F1208U0B(64MB)以太网芯片:CS8900A (10M/100MB)1.3 工具介绍仿真器:Dragon-ICE电缆:串口线,并口线2 软件环境2.1 主机软件环境2.1.1 Windows操作系统ADS编译工具:ADS1.2仿真器软件: Dragon-ICE daemon程序2.1.2 Linux 操作系统GNU交叉编译工具:2.95.3:作用:编译u-boot3.3.2, 3.4.4:作用:编译内核和应用程序tree工具:作用:查看文件目录树下载:从ftp:///linux/tree/下载编译2.1.3 目标板最后运行的环境启动程序:u-boot-1.1.4 内核:linux-2.6.14.1 应用程序:1. busybox-1.1.32. TinyLogin-1.43. Thttpd-2.252.2 Linux 下工作用户及环境2.2.1 交叉工具的安装工具链的编译过程请参考第三部分.1. 下载交叉工具2.95.3 下载地址:ftp:///pub/armlinux/toolchain/cross- 2.95.3.tar.bz23.3.4 下载地址:2. 编译交叉工具[root@localhost ~]mkdir /usr/local/arm[root@localhost ~]cd /usr/local/arm把cross-2.95.2.tar.bz2, cross-3.4.4.tar.gz 拷贝到/usr/local/arm目录中。