嵌入式Linux bootstrap 移植

合集下载

嵌入式Linux系统的移植及其根文件系统的实现

嵌入式Linux系统的移植及其根文件系统的实现

2005年第2期漳州师范学院学报(自然科学版) No. 2. 2005年(总第48期) Journal of Zhangzhou Teachers College(Nat. Sci.)General No. 48 文章编号: 1008-7826(2005)02-0046-05嵌入式Linux系统的移植及其根文件系统的实现杨洁洁(福州大学信息与通信工程系, 福建福州 350002)摘要: 本文以AT91RM9200微处理器为实例,介绍了在基于ARM9核的硬件平台上构建带有根文件系统的嵌入式Linux系统的方法. 简要叙述了嵌入式Linux系统的特点和组成之后,我们给出了启动加载程序U-boot的配置、Linux内核的裁剪移植、ramdisk根文件系统的制作以及应用NFS文件系统进行基本应用程序开发的方法.关键词: ARM9 ; 嵌入式Linux系统 ; 文件系统 ; 移植中图分类号: TP316文献标识码: A1 引言随着数字技术的发展,近年来嵌入式系统技术发展迅猛,已广泛应用于工业控制、国防、通信、办公自动化、消费电子等多种领域. 而Linux作为一款优秀的源码开放、功能强大、高效稳定、开发环境成熟的多任务操作系统,具有许多商业操作系统不可比拟的优势,成为了最有潜力的嵌入式操作系统. 本文给出了在基于ARM9核的硬件平台上构建一个基本的带有根文件系统的嵌入式Linux系统的过程与方法.2 嵌入式Linux交叉开发平台简介Linux是一款自由多任务操作系统,主要由4个部分组成:用户应用程序、系统调用接口、Linux 内核(kernel)和硬件控制器. 内核是Linux操作系统中最核心的部分,也是嵌入式系统开发中修改、移植的重点. 我们根据实际需要对Linux2.4.27版本内核进行裁剪,并移植到AT91RM9200微控制器平台.AT91RM9200系统板包括以下几个部分:AT91RM9200微控制器、SDRAM存储器、FLASH存储器、以太网控制器及接口、RS232接口、调试口以及电源复位等电路. AT91RM9200微控制器是Atmel 公司推出的一款基于ARM920T核的32位RISC微控制器,运算速度达200MIPS,片内资源丰富,非常适合于系统控制、通讯领域的开发应用.嵌入式软件开发采用的是宿主机――目标机模式[2][3]. 我们选用资源丰富性能优越的发行版本Redhat作为开发平台宿主机的操作系统,并在其上建立arm-linux交叉编译环境. 下载并安装交叉工具链软件包cross-2.95.3.tar.bz2,其内包括二进制文件处理工具Binutils、arm-linux交叉编译器GNUgcc和链接运行库glibc. arm linux GNUgcc编译器是一套完整的交叉C编译器,包括:C交叉编译器gcc、交叉汇编工具as、反汇编工具objdump、连接工具ld、调试工具gdb. 可以用批处理文件Makefile将上述工具组合成方便的命令行形式.收稿日期:2005-03-29作者简介:杨洁洁(1980-), 女, 福建泉州人, 硕士研究生.第2期杨洁洁:嵌入式Linux系统的移植及其根文件系统的实现47 3 Linux操作系统的移植根据嵌入式系统的特点,要使嵌入式Linux系统具备一定的功能且保持小型化应包括以下部分:启动加载程序、内核、初始化进程,以及硬件驱动程序、文件系统、必要的应用程序、TCP/ IP协议栈等.3.1 启动加载程序的安装配置启动加载程序是系统上电后运行的第一段软件代码,用于基本硬件的初始化和检测、加载引导内核和文件系统的启动. 我们采用U-boot-1.1.1作为ARM Linux的启动加载程序. U-boot是一个庞大的公开源码的功能强大的板级支持包,支持基于PowerPC、ARM、MIPS、x86等体系结构的多数CPU,并包含常见的外设驱动. 在宿主机上安装U-boot源文件,并配置U-boot的运行环境在AT91RM9200系统板上. 在U-boot的readme文档中对U-boot的配置、移植、使用等方法有详细的介绍. 编译U-boot源代码,得到U-boot原始二进制可执行映像u-boot.bin和内核映像封装工具tools/mkimage. 引导程序boot.bin、U-boot映像u-boot.bin及其gzip压缩文件u-boot.gz三个文件构成一个完整的启动加载程序.3.2 系统板存储器空间分配在进行Linux移植之前应具体了解系统板上存储器的分配情况,并对各空间的存储内容作好安排,通常示意图如图1所示:使用固态存储器FLASH存放boot.bin、u-boot.gz、U-boot环境变量以及uImage和图1 存储器空间分配示意图ramdisk;使用SDRAM作为代码执行的空间. 当系统正常上电时从FLASH首地址开始执行,即首先运行U-boot,再由U-boot将FLASH 中的uImage和ramdisk分别复制到SDRAM相应空间,然后跳转到入口entryaddr启动内核. 内核解压后代码输出到entry起始的空间,并从entry开始执行. SDRAM开头预留的空间(通常为32KB)用于存储内核启动参数和数据页表等全局数据结构.3.3 内核源代码的修改、配置及编译获取Linux2.4.27内核源代码并下载针对该版本的ARM相关补丁. 内核源代码中与体系结构相关的部分在arch目录中,其中与ARM体系结构相关的代码在arch/arm子目录里,所需的头文件存在include/asm-arm目录. 我们把移植到AT91RM9200系统板过程中需要修改或添加的文件整理列于表1.对内核源代码作必要修改后,我们根据硬件情况和应用开发要求对内核进行重新配置. 使用以下三种命令之一:make xconfig(图形方式),make menuconfig(菜单方式),make config (文本方式)启动内核配置界面,其中图形窗口方式界面最为友好、易于使用. 在配置过程中,将Linux系统运行的必要选项和与AT91RM9200系统板相关的配置项(如处理器类型、系统类型、定时器和LED选项、板上外围设备功能选项)选上,其他功能根据应用开发要求选择、定制. 针对嵌入式系统,我们在整个移植过程中归纳得出了以下应特别注意的几点:◆开发板需要选择串行口作为系统控制台,将内核所有信息和错误告警经由串行口输出显示到宿主机的超级终端,并利用超级终端和tftp服务器通过串行口和以太网口下载程序到板上,因此‘character device’48 漳州师范学院学报(自然科学版) 2005年子项中的‘suppose for console on serial port’和‘network device suppose’子项中的‘10/100M Ethernet suppose’必选;◆若应用NFS网络文件系统时以下几项必选:‘block device’子项中的‘network block device suppose’,‘file systems’子项中的‘kernel automounter support’、‘NFS suppose’、‘NFS client suppose’、‘root file system on NFS’;而采用ramdisk构建根文件系统时应选择:‘block device’子项中的‘ramdisk suppose’、‘initial ramdisk(initrd)suppose’;◆作为嵌入式系统通常具有联网功能,可根据应用要求选择‘network’子项中的‘TCP/IP networking’、‘PPP support’等选项;◆另外配置时将需要用到但不常用的功能代码(如某些设备驱动程序)编译成模块(module),在内核运行时动态加载进来,这样能进一步减小内核尺寸.表 1 内核源代码中文件修改清单路径 文件 修改事项 源代码根目录(用linux/表示) Makefile 指定系统架构、交叉编译器Makefile 产生系统启动代码,添加AT91RM9200项 linux/arch/arm/config.in 添加AT91RM9200板的相关配置选项信息 linux/arch/arm/tools/ mach-types 定义AT91RM9200板的宏和机器号linux/arch/arm/boot/ Makefile生成启动用的内核映像,指定内核映像解压后代码输出的地址Makefile 产生压缩内核映像,添加目标文件head-at91rm9200.ohead-at91rm9200.S 解压前初始化AT91RM9200处理器linux/arch/arm/boot/compressed/ head.S 解压内核映像Makefile 添加AT91RM9200项head-armv.S 内核代码的入口debug-armv.S 调试串口的地址初始化、发送、等待、忙状态定义 linux/arch/arm/kernel/entry-armv.S 规定底层向量接口规则,主要定义CPU初始化时中断处理部分linux/arch/arm/mm/ mm-armv.c 与硬件相关的内存管理,如初始化内存页表、内存映射Makefile 添加目标文件at91rm9200.olinux/arch/arm/mach-at91rm9200/ core.c AT91RM9200处理器架构的定义如中断、寄存器映射、IO 映射、定时器设置等 (也可用多个文件:irq.c arch.c mm.c time.c等实现)linux/include/asm-arm/arch-at91rm9200 at91rm9200.h irqs.h memory.h hardware.h dma.hserial.h io.h vmalloc.h time.h timex.h system.h等与AT91RM9200有关的头文件定义linux/drivers/ 移植外设的驱动程序配置完后进行编译,嵌入式Linux内核编译的前面步骤与普通Linux内核编译没有太大区别,许多书籍都有介绍,也可参阅参考文献[2][5],即依次执行三个命令:make dep Æmake clean Æ make Image,将生成未压缩的内核映像vmlinux. 如果在配置时把一些功能选项设置为模块形式,那还需要以下两步:第2期杨洁洁:嵌入式Linux系统的移植及其根文件系统的实现49make modules Æ make modules_install ,即把编译好的模块目标文件安装在目录/lib/modules/2.4.27/里. 嵌入式内核编译不同之处在于之后还要将vmlinux转换成可以下载到嵌入式系统板上运行的内核映像uImage:arm-linux-objcopy -O binary -S vmlinux linux.bin/*用交叉工具arm-linux-objcopy将vmlinux转换成二进制格式映像linux.bin */ gzip -v9 linux.bin /*压缩内核映像*/mkimage -A arm -O linux –T kernel -C gzip -a entry -e entry -d linux.bin.gz uImage/*利用U-boot的mkimage工具将启动内核所需信息(如:目标板架构、操作系统、映像类型、压缩方法、入口点)添加进内核,封装生成uImage*/4 Ramdisk根文件系统的制作Ramdisk是通过将计算机的内存(RAM)用作设备来创建和挂装文件系统的一种驱动器机制,它通常用于无盘系统(当然包括嵌入式设备). 根文件系统是Linux系统的根本所在,启动时必须加载进来以支持系统的运行,一般包括以下目录内容:/dev(设备文件目录);/proc (proc文件系统目录);/etc(系统配置文件的目录);/sbin(系统程序的目录);/bin(基本应用程序目录);/lib(共享函数库的目录);/mnt (装载其他磁盘节点的目录);/usr(附加应用程序的目录). 我们在宿主机上制作一个4MB大小的ramdisk根文件系统,制作流程如下:dd if=/dev/zero of=my_ramdisk bs=1k count=4096/*创建一大小为4MB的块,读写块大小为1kB,输入文件/dev/zero,输出文件my_ramdisk */ mke2fs -vm0 my_ramdisk 4096/*用mke2fs将my_ramdisk转换为4MB的ext2格式文件系统*/ mount -o loop my_ramdisk /mnt/my_ramdisk_directory/*用mount命令将my_ramdisk挂载到/mnt/my_ramdisk_directory目录,该目录应事先建好*/ ——进入my_ramdisk_directory目录,构建根文件系统——umount /mnt/my_ramdisk_directory /*构建完毕,卸载文件系统*/gzip my_ramdisk /*压缩my_ramdisk,生成文件系统映像*/构建根文件系统时,首先是创建dev、proc、bin、sbin、etc、lib等目录,接着将目录里所需文件移植进该文件系统,对于系统程序和基本的应用程序,有两种方案去获得,一个方法是交叉编译所有需要的命令源代码,可以借助Busybox工具来完成;另一个是将现有的ARM专用ramdisk内文件拷到自己的ramdisk里. 网络上资源丰富,前人已做了很多工作,我们可以采用第二种方案以节省时间和精力,并且生成的ramdisk稳定、不易出问题.5 操作系统的下载在宿主机端我们使用Redhat上的minicom、Tftp或Windows上的超级终端和Tftp软件,将启动加载程序U-boot映像、内核映像uImage、根文件系统映像my_ramdisk依次下载到AT91RM9200系统板上. 其中还应正确设置以下U-boot环境变量:网络属性ethact、ethaddr、ipaddr、netmask、gatewayip、50 漳州师范学院学报(自然科学版) 2005年serverip、hostname,内核启动参数bootdelay,默认执行的启动命令串bootcmd. 我们通过适当设置bootargs 和bootcmd变量,来选择加载文件系统的方法——使用Ramdisk技术还是NFS,当然前提是已将内核编译成支持该功能. 建议在软件开发过程中采用NFS远程加载文件系统,便于进行动态软件开发调试;在把软件最终固化到板上时采用Ramdisk的方式加载文件系统并固化进FLASH.6 结语本文为开发者提供了在ARM9平台上构建一个基本嵌入式Linux系统的过程与方法的参考. 我们基于A T91RM9200微控制器的硬件平台,对Linux内核版本2.4.27进行裁减、移植,编译生成的内核在A T91RM9200开发板上成功运行,制作的根文件系统可以通过Ramdisk和NFS两种方式正常加载进内核. 笔者在该Linux平台上后续开发的嵌入式无线通信系统也获得了较好的运行效果. 构建嵌入式Linux操作系统是个复杂的课题,其系统的实时性、安全性、稳定性、精简化等方面都需要开发人员在设计中进一步考虑.参考文献:[1] Atmel Corporation , AT91RM9200 Datasheet Version B , 2004.[2] 刘峥嵘, 等编著. 嵌入式Linux应用开发详解[M]. 北京: 机械工业出版社 , 2004.7[3] Karim Yaghmour著, 韩存兵, 等译. 构建嵌入式Linux系统[M]. 北京:中国电力出版社, 2004.12[4] Daniel P. Bovet , Understanding the Linux Kernel (2nd Edition) [M]. O'Reilly , 2002.[5] 孙天泽, 等编著. 嵌入式设计及Linux驱动开发指南[M]. 北京: 电子工业出版社, 2005.The Approach to Porting Embedded Linux OS and Building Root FileSystemYANG Jie-jie(Dept. of Information and Communication Engineering , Fuzhou University , Fuzhou 350002, China)Abstract: This paper introduces an approach to porting embedded Linux OS with root file system to ARM9-based AT91RM9200 platform. Briefly depicting the characteristics and composing of Linux OS,we present the method including the configuration of U-boot, the customization and porting of Linux,and the building of ramdisk filesystem. We also give the skill about applying NFS to system software development.Key words:ARM9 ; embedded Linux OS ; file system ; porting。

嵌入式μCLinux系统移植(全文)

嵌入式μCLinux系统移植(全文)

嵌入式μ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子系统就目前而言,支持绝大多数的闪存设备,且不断的有更多的驱动程序添加进来,以用于不同的闪存芯片。

嵌入式Linux应用编程模块二:安装嵌入式BootLoader技术

嵌入式Linux应用编程模块二:安装嵌入式BootLoader技术
.modules)。
上一页 下一页 返回
任务3:GRUB引导加载程序
• ⑥加载内核的相关设置(/etc/sysctl.conf)。 • ⑦设置系统时间。 • ⑧设置终端控制台的字型。 • ⑨设置RAID与LVM等硬盘功能。 • ⑩以fsck检验磁盘文件系统。 • (6)启动系统服务与相关启动设置文件。 • (7)用户自定义引导启动程序/etc/rc.d/rc.loc
l/dev/sdax来重新安装gru:引导加载程序viv
• 子任务1:vivi简介
• vivi是韩国MIZIResearch公司为其开发的SMDK 2410开发板编写的一款Bootloader,目前的版本是0 .1.4。vivi也有两种工作模式:启动加载,可以在一段时间后 自行启动Linu内核,这是vivi的默认模式;下载模式,vi vi为用户提供一个命令行接口,通过接口可以使用vivi提供的 一些命令。
AM空间中。 • (4)为内核设置启动参数。 • (5)调用内核。
上一页
返回
任务3:GRUB引导加载程序
• 子任务1:Linux操作系统的启动流程
• (1)加载BIOS的硬件信息,并获取第一个启动设备的代号。 • (2)读取第一个启动设备的MBR (主引导记录) 的引导加载程
序(即lilo,grub,spfdisk等)的启动信息。 • (3)加载核心操作系统的内核信息,内核开始解压缩,并且尝试驱
上一页
返回
任务2:BootLoader
• 一、BootLoader所支持的CPU和嵌入式板 • 一般来说,不同的CPU体系结构需要不同的BootLoader
,但有些功能强大的也会同时支持不同体系结构的CPU。U-Bo ot就同时支持多种体系结构,如X85、ARM、DSP等。除了 依赖CPU的体系结构外,也依赖于具体的嵌入式板级设备的配置, 如板卡的硬件地址的分配、RAM芯片的类型以及其他外设的类型等 。 • 现有的各种BootLoader所支持的CPU,有LILO ( X86)、GRUB (X86)、Blob(ARM),U-Bo ot(X86、ARM、PowerPC)、vivi(ARM)等 。

嵌入式Linux系统的移植技巧_李晶

嵌入式Linux系统的移植技巧_李晶

嵌入式Linux 系统的移植技巧李 晶,赵小强,范九伦(西安邮电学院 陕西西安 710061)摘 要:Linux 被广泛的应用在嵌入式领域,根据实际需要构建一个自己的嵌入式Linux 变得尤为重要。

根据实际需要介绍嵌入式Linux 系统的构建,框架及其移植技巧,并以三星公司的S3C2410处理器芯片为例,将开源Linux 操作系统移植到此ARM 处理器上,详细阐述开发环境的搭建,Bootloader 的架构及功能,内核及文件系统的编译及移植技巧。

实验证明,移植后的系统运行稳定且高效,对构建其他嵌入式操作系统具有参考意义。

关键词:S3C2410;嵌入式系统;Bootloader ;内核;文件系统中图分类号:TP316 文献标识码:B 文章编号:10042373X (2008)242040203Method of Porting on the Embedded Linux SystemL I Jing ,ZHAO Xiaoqiang ,FAN Jiulun(Xi ′an Institute of Po st s and Telecommunication ,Xi ′an ,710061,China )Abstract :Linux is used widely in the embedded field ,it is important to build our embedded Linux system ,according to the project ,this paper introduces the method of building the embedded Linux system.Taking the Linux transplanted onto the tar 2get board based on the process or of S3C2410as an example.Method of embedded Linux is transplanted ,then ,how to build up an environment is described ,focusing on the f ramework and f unctionality of Bootloader and transplant of Linux kernel.This method proves high effective ,the transplanted Linux in the embedded system runs well and a good reference to the others em 2bedded operator system is given.K eywords :S3C2410;embedded system ;Bootloader ;kernel ;file system收稿日期:2008204210 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。

第17章:嵌入式Linux移植与引导

第17章:嵌入式Linux移植与引导
}; struct ATAG_INITRD2 #definetag_cmdline { 0x54420005 char cmdline[1]; /* this is the minimum size */ struct tag_initrd { }; u32 start; u32 size; }; /* physical start address */ /* size of compressed ramdisk image in bytes */
嵌入式Linux的引导

stage2内存映射 – 如下数据结构用来描述RAM 地址空间中的一段连续的 地址范围:
type struct memory_area_struct { u32 start; //内存区域的起始地址 u32 size; //内存区域的大小(字节数) int used; //内存区域的状态 } memory_area_t; used=0|1 • 1=这段地址范围已被实现,也即真正地被映射到RAM 单元上 • 0=这段地址范围并未被系统所实现,处于未使用状态。
• R0=0; • R1=机器类型ID; • R2=传递给内核的启动参数起始地址;
– 2. CPU 模式:
• 必须禁止中断(IRQs和FIQs); • CPU必须处于SVC 模式;
– 3. Cache 和MMU 的设置:
• MMU 必须关闭; • 指令Cache 可以打开也可以关闭; • 数据Cache 必须关闭;
东南大学集成电路学院
嵌入式操作系统
第十七章 嵌入式Linux移植与引导
戚隆宁 longn_qi@
国家ASIC系统工程技术研究中心
主要内容


嵌入式Linux的引导 嵌入式Linux的移植

ARM的嵌入式Linux移植体验

ARM的嵌入式Linux移植体验

ARM的嵌入式Linux移植体验之BootLoader1BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。

通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。

因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。

尽管如此,我们仍然可以对BootLo ader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

BootLoader 的实现依赖于CPU的体系结构,因此大多数 BootLoader 都分为stage1 和stage2 两大部分。

依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在 stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。

而stage2 则通常用C 语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。

BootLoader 的 stage1 通常包括以下步骤:·硬件设备初始化;·为加载Boot Loader的stage2准备 RAM 空间;·拷贝Boot Loader的stage2 到RAM空间中;·设置好堆栈;·跳转到 stage2 的 C 入口点。

Boot Loader的stage2通常包括以下步骤:·初始化本阶段要使用到的硬件设备;·检测系统内存映射(memory map);·将kernel 映像和根文件系统映像从flash上读到 RAM 空间中;·为内核设置启动参数;·调用内核。

本系统中的BootLoader参照韩国mizi公司的vivi进行修改。

1.开发环境我们购买了武汉创维特信息技术有限公司开发的具有自主知识产权的应用于嵌入式软件开发的集成软、硬件开发平台ADT(ARM Development Tools)它为基于ARM 核的嵌入式应用提供了一整套完备的开发方案,包括程序编辑、工程管理和设置、程序编译、程序调试等。

LINUX嵌入式系统移植与应用

LINUX嵌入式系统移植与应用
( 保密的学位论文在解密后应遵守此规定)
签I 名 & : U
导师签名
日: 6 月 期- 年f 6日 ) }
第一章 绪论
第一章 绪论
嵌入式计算机系统是以 应用为中心、以计算机技术为基础、软硬件可裁剪, 能适应应用系统对功能、 可靠性、 成本、 体积、功耗严格要求的专用计算机系统。 同时 工E 国际电 EE( 器和电 子工程师协会) 将嵌入式系统定义为 “ e c u d Dv e t i s o e
dvl i fl Te a h t to e bde s t dawtvru a e e o n id h r e c cn n f edd e el aos c e p g . e r o e s m e s y m i i s t s h p oc pt s j t u at n s t , ls 3 a lao a c s e f u r e , s e ye wre n , p itn o u r o e u c s h h t m i s e G ci n n m m b c e s e t p d e coi Pia thi ei l e edd ri ssm s t cidsn l tn . r n us u e bde oe tg t , e h eg, er c r y e q n d m m c c p an y e y m p i s apc i sf a dvl m nad i s i i e i ta t pols t plao owr ee p e n vru s v e sg e h e e m s i tn e o t ao e c n ta r e p ' o t r v e
为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。
与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明

嵌入式Linux内核移植

嵌入式Linux内核移植

嵌入式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操作系统有许多优势。

它是一个开源项目,有着广泛的开发者和社区支持。

这意味着有大量的资源和文档可供参考,有利于降低开发难度和成本。

Linux具有良好的稳定性和可靠性,能在各种硬件平台上运行。

嵌入式Linux可以提供类似PC的环境,但需要的资源更少,效率更高。

需要选择一个适合设备硬件平台和应用程序需求的Linux内核版本。

这可能包括ARM、MIPS或其他架构。

选择后,下载并解压相应的内核源代码。

配置内核是移植过程中的关键步骤。

通过make menuconfig或make config命令,可以针对特定硬件平台和应用程序需求进行配置。

这包括处理器类型、内存大小、设备驱动、文件系统等。

针对硬件平台编写或修改设备驱动程序,以确保Linux内核能正确识别和访问设备。

这通常需要了解硬件的工作原理和Linux驱动程序开发的相关知识。

使用make命令编译内核和设备驱动程序。

成功后,生成可烧录到设备上的映像文件(如zImage或initramfs)。

将映像文件烧录到目标设备并启动。

嵌入式Linux操作系统的移植是一项复杂的任务,需要深入了解硬件平台、操作系统和驱动程序开发的知识。

还需要注意以下几点:有限的资源:嵌入式设备的资源通常比PC少得多,如RAM、Flash等。

这需要在移植过程中优化资源的使用。

硬件兼容性:确保选择的Linux内核版本与目标设备的硬件兼容。

如果不兼容,可能会导致系统运行不稳定或无法运行。

驱动程序稳定性:设备驱动程序的稳定性直接影响到整个系统的稳定性和可靠性。

在编写或修改驱动程序时,需要进行充分的测试和验证。

网络安全性:嵌入式系统通常具有网络连接功能,因此需要考虑网络安全问题。

嵌入式Linux内核移植详解(顶嵌)

嵌入式Linux内核移植详解(顶嵌)

内核移植阶段内核是操作系统最基本的部分。

它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。

直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。

硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。

内核和用户界面共同为用户提供了操作计算机的方便方式。

也就是我们在windows下看到的操作系统了。

由于内核的源码提供了非常广泛的硬件支持,通用性很好,所以移植起来就方便了许多,我们需要做的就是针对我们要移植的对象,对内核源码进行相应的配置,如果出现内核源码中不支持的硬件这时就需要我们自己添加相应的驱动程序了。

一.移植准备1. 目标板我们还是选用之前bootloader移植选用的开发板参数请参考上文的地址:/thread-80832-5-1.html。

bootloader移植准备。

2. 内核源码这里我们选用比较新的内核源码版本linux-2.6.25.8,他的下载地址是ftp:///pub/linux/kernel/v2.6/linux-2.6.25.8.tar.bz2。

3. 烧写工具我们选用网口进行烧写这就需要内核在才裁剪的时候要对网卡进行支持4. 知识储备要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进行简单介绍。

(1)arch/: arch子目录包括了所有和体系结构相关的核心代码。

它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体系结构的子目录。

PC机一般都基于此目录。

(2)block/:部分块设备驱动程序。

(3)crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。

(4) documentation/:文档目录,没有内核代码,只是一套有用的文档。

(5) drivers/:放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block 下为块设备驱动程序,比如ide(ide.c)。

嵌入式Linux系统移植

嵌入式Linux系统移植

• 每个体系结构可以有若干变种variant,或 不同配置的硬件machine,统称subarchitecture。以arm体系结构举例:
– variants 包括arm7tdmi, arm926ejs, strongarm,xscale
– machine 包括edb7312, smdk2410, omap-h2
– u32 __be32_to_cpu(u32); /* convert big-endian to cpu's byte order */
– u32 __le32_to_cpus(u32); /* convert little-endian to cpu's byte order */
2019/5/4
• scripts此目录包含用于配置核心的脚本文件,在配置内核时用到。
• documentation 此目录是一些文档,非常详细,起参考作用。
2019/5/4
操作系统实验
27
Linux内核向S3C2410移植
• S3C2410简介 • 移植内容:
移植Bootloader 移植Linux内核 移植根文件系统
2019/5/4
操作系统实验
3
硬件平台对移植的影响
• Linux硬件平台 • 硬件平台对移植的影响
– 处理器字长 – 字节顺序 – 时间
2019/5/4
操作系统实验
4
Linux硬件平台
• 在Linux内核里,每一个处理器指令集对应 一个独立的体系结构architecture,比如
– alpha, arm, i386, mips, ppc
• Linux内核对多平台有很好的支持 • 内核的对外部接口是统一的,并且与平台无关 • 内核的大多数代码也是与平台无关的 • 主要的体系结构相关代码存在于

嵌入式linux系统移植基本知识

嵌入式linux系统移植基本知识

系统移植第一天【1】系统移植重点掌握的内容1、搭建交叉开发环境2、移植Bootloat3、移植kernel4、根文件系统的制作【2】第一天要掌握的1、配置交叉工具链和基本命令使用2、制作SD卡启动盘(未完成)3、搭建tftp服务器4、搭建Nfs服务器5、烧写uboot(未完成)6、用nfs方式启动开发板跑linux(未完成)【3】嵌入式系统的应用领域1、工业控制:工控设备、智能仪表、汽车电子、电子农业等2、消费电子:信息家电、智能玩具、通信设备、移动存贮、视频监控等3、医务医疗:医疗电子4、军事国防:军事电子5、网络设备和电子商务【4】嵌入式系统的定义1、一般定义:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统2、广义定义:凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统【5】通用嵌入式系统硬件组成部分1、微控制器2、晶振3、内存(如:SRAM,SDRAM)4存储器(如:ROM, FLASH, SD, 微硬盘)6、其他外围设备接口6、输入、输出接口【6】通用嵌入式系统软件组成部分1、无OS嵌入式系统由应用层、驱动层和硬件层组成2、有OS嵌入式系统由Applications、kernel、Driver、H/W组成【7】嵌入式系统LINUX交叉开发环境硬件基本组成1、开发主机2、目标机3、连接介质【8】搭建嵌入式LINUX开发主环境的要工作1、准备开发主机-目标机(开发板)以及二者连接介质2、准备目标机代码3、安装交叉工具链4、开发主机上安装的软件(为方便调试)a)终端软件(putty、minicom)b)Tftp服务c)Nfs服务d)其他工具软件dnw等【9】为什么需要交叉编译一、背景条件1、嵌入式系统硬件资源限制CPU 主频、内存容量2、嵌入式系统MCU体系结构和指令集不同ARM, MIPS, POWERPC3、提高开发效率二、交叉编译1、在开发主机运行编译器编译内核、应用程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式Linux bootstrap 移植
一、硬件坏境:PC机+usb数据线+串口线+at91sam9260
二、软件坏境:windows xp+ sam-ba v2.12+ttermpro+ubuntu 7.10虚拟机
+ELDK 4.1+WinARM-20060606.zip+bootstrap.rar+SecureCRT.EXE
三、Linux编译坏境:
1.ubuntu 7.10虚拟机端:
root@hl:/# cat /etc/issue
Ubuntu 7.10 \n \l
2.确认ELDK 4.1编译环境
root@hl:/# arm-linux-gcc –v
显示如下信息:包含gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)即可
Reading specs from
/usr/local/arm/eldk-4.1/usr/bin/../lib/gcc/arm-linux/4.0.0/specs Target: arm-linux
Configured with:
/opt/eldk/build/arm-2007-01-21/work/usr/src/denx/BUILD/crosstool-0.3 5/build/gcc-4.0.0-glibc-2.3.5-eldk/arm-linux/gcc-4.0.0/configure
--target=arm-linux --host=i686-host_pc-linux-gnu
--prefix=/var/tmp/eldk.bMi2nK/usr/crosstool/gcc-4.0.0-glibc-2.3.5-el dk/arm-linux
--with-headers=/var/tmp/eldk.bMi2nK/usr/crosstool/gcc-4.0.0-glibc-2.
3.5-eldk/arm-linux/arm-linux/include
--with-local-prefix=/var/tmp/eldk.bMi2nK/usr/crosstool/gcc-4.0.0-gli bc-2.3.5-eldk/arm-linux/arm-linux --disable-nls
--enable-threads=posix --enable-symvers=gnu --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long --enable-__cxa_atexit Thread model: posix
gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)
四、移植linux可以采用u-boot+kernel+rootfs,但是本人移植过程中,遇
到u-boot上电时多数情况不启动,需按reset键复位多次,才会启动,所以再加引导程序bootstrap,解决该问题,来看下norflash存储分布:
1.注意本人使用的norflash blocksize块大小为0x20000=128k,不同的
flash,blocksize可能不一样,任何存储边界必须是blocksize的整数倍,比如norflash_at91sam9260ek.bin小到4k,但也必须占用一个块,区域为0x0-0x20000
2.现在知道bootstrap的norflash_at91sam9260.bin地址为:0x0-0x20000 u-boot.bin地址为:0x20000-0x60000
环境变量存储地址为:0x60000-0x80000 kernel.bin地址为:0x80000-0x200000 ramdisk.gz地址为:0x200000-0x600000 rootfs.jffs2地址为:0x600000-0x1600000
应用程序app地址为:0x1600000-0x2000000
五、Xp下WinARM编译bootstrap
1.下载WINARM,然后解压,一般解压后放在:C:\ winarm下
2.设定环境变量
点击“我的电脑”-->右键-->属性-->高级—>环境变量-->系统变量下找到Path项,编辑变量值
为:%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C: \winarm\bin;C:\winarm\utils\bin;
如图所示:
3. xp下解压bootstrap.rar,点击“开始”-->运行—>输入“cmd”-->确定
4.进入norflash目录,并编译:
C:\Documents and Settings\Administrator>cd /D C:\Documents and Settings\Administrator\桌面
\bootstrap\bootstrap\board\at91sam9260ek\norflash
继续执行:
make clean
make all
应该成功编译并生成 norflash_at91sam9260ek.bin否则需要排错
5.上步生成的norflash_at91sam9260ek.bin烧到norflash 0x0会运行,
可示波器测at91sam9260芯片B1脚SDCK有100M波形,但串口无信息,因为bootstrap\board\at91sam9260ek\norflash\at91sam9260ek.h中#undef
CFG_DEBUG
6.修改bootstrap\board\at91sam9260ek\norflash\at91sam9260ek.h 如下所示:
#define IMG_ADDRESS 0x20000 //u-boot.bin Address in NorFlash 0x20000-0x60000
#define I MG_SIZE 0x40000 //u-boot.bin Size in NorFlash 0x40000=256k
#define MACH_TYPE 0x44B /* AT91SAM9260-EK */
#define JUMP_ADDR 0x23f00000 //Final Jump to Address at 0x23f00000 execute u-boot.bin
#define CFG_DEBUG
注意:JUMP_ADDR 0x23f00000 为内存SDRAM地址区间,可取其它值,如#define JUMP_ADDR 0x20000000并未发现异常,避开其它程序使用内存时地址冲突即可
六、Ubuntu 7.10虚拟机下编译bootstrap
1.xp下解压bootstrap.rar ,将解压的文件夹bootstrap传送到虚拟机根目录,linux下不方便解压rar格式的文件,也不方便传送文件夹,这里利用PenguiNet.exe
2.虚拟机下进入norflash文件夹,同上修改at91sam9260ek.h,编译
root@hl:/# cd /bootstrap/board/at91sam9260ek/norflash/
root@hl:/bootstrap/board/at91sam9260ek/norflash# make ARCH=arm CROSS_COMPILE=arm-linux- clean
root@hl:/bootstrap/board/at91sam9260ek/norflash# make ARCH=arm CROSS_COMPILE=arm-linux- all
成功则生成:norflash_at91sam9260ek.bin,备用
七、利用sam-ba_2.12 usb线烧录norflash_at91sam9260ek.bin到norflash
的地址0x0处,断电后重新上电,串口显示,如图所示:。

相关文档
最新文档