嵌入式Linux在SH4架构下的移植技术研究
4.2嵌入式linux_内核移植
硅谷嵌入式教育
真实项目为依托
Linux内核配置编译
编译内核的需要
自己定制编译的内核运行更快 系统将拥有更多的内存 不需要的功能编译进入内核可能会增加被系统攻击 者利用的漏洞 将某种功能编译为模块方式会比编译到内核内的方 式速度要慢一些
硅谷嵌入式教育
真实项目为依托
Linux内核配置编译
硅谷嵌入式教育
真实项目为依托
Linux内核配置编译
配置的注意选项
3 Loadable module support --->
[*] Module versioning support 模块版本支持 该选项可以使得系统支持其它版本的内核模块。 [ ] Source checksum for all modules 否 这个功能是为了防止更改了内核模块的代码但忘记更改版本号而 造成版本冲突。 [*] Automatic kernel module loading 在内核需要一些模块时,可以自动调用modprobe命令来加载需要 的模块。
硅谷嵌入式教育
真实项目为依托
Linux内核配置编译
修改新的bootloader,用新内核启动 重新启动系统,即可引导我们新的内核。
硅谷嵌入式教育
真实项目为依托
内核模块概述
太多的设备驱动和内核功能集成在内核中,内核过于庞大。如何解决 ?
Linux内核引入内核模块机制。通过动态加载内核模块 ,使得在运行过程中扩展内核的功能。不需要的时候 ,卸载该内核模块。
硅谷嵌入式教育
真实项目为依托
Linux内核配置编译
编译内核的需要
Linux作为一个自由软件,不断增加许多新的特性。 想要使用这些新特性,或想根据自己的系统度身定 制一个更高效,更稳定的内核,就需要重新编译内 核。
嵌入式LINUX内核移植步骤-1
1.解压内核
解压内核
[cpp] view plaincopy
1. root@ubuntu:/forlinx# tar zxvf linux-3.3.5.tar.gz
########################################################################################################
3.
select CPU_S3C6410
4.
select SAMSUNG_DEV_ADC
5.
select S3C_DEV_HSMMC
6.
select S3C_DEV_HSMMC1
7.
select S3C_DEV_I2C1
8.
select SAMSUNG_DEV_IDE
9.
select S3C_DEV_FB
[cpp] view plaincopy
1. obj-$(CONFIG_MACH_OK6410)
+= mach-ok6410.o
######################################################################################################## 修改顶层的 Makefile,第 195 和 196 行编辑
[cpp] view plaincopy
1. ARCH
?= arm
***************这里禁止在 arm 后出现空格或其它符号
2. CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-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。
嵌入式环境下Linux移植问题的探讨
h船“小肺e(鼬刊一>cJ以)用于获取々前任务时脚的函数
D0 s·41a1(I)信号处理函数 FInd p删1plor(受h甜.New一【ask)寻找最大优先权线程的函数 Make州sIem acllve()激活新线程函数
sⅥh1Ph¨(c㈣t.New Make svmem ldIe()关闭原来的线程 fask)将N删一lask切换为当前线程函数 硬实时凋度核心模块流程如图3所示。 曝丽丽百殂 Ncw-lask=当前线程;schd=当前蹰崖队列指针 禁止中断状态设置 鬯兰竺型兰坚型篓兰丝璧 断誉芝兰%兽系孳豫剃≮藁鬻蔷
图4通用ur呲系统与移植后的嵌入式IjmⅨ系统 关于开发成本问题。“nux丰富的系统资源是一笔 巨大的财富,选择“nux进行二次开发本身就是选择了 低成本,这也是许多研发采用“n“操作系统的理由。 目前专门为unux设计的模拟运行环境非常多,性能也 很好,一般都能对多处理器、多级高速缓冲器、多级流水 线及RIsK指令执行模式等先进的体系结构进行模拟,
万方数据
计算机应用研究
2003年
程实施cMM(cap出的MaIunty Mode”软件过程管理、改 进与评估模式,从而对大量的代码修改与关联有文可 依,有据可查,十分有效地提高了软件可靠性,加快了软
件开发进度并达到了预期目标。 开发的核心流程如图1所示,整个开发是在核心流
程的基础上不断重复。 J_堕·g·!f5 i—]
,——Ⅵ百磊百r]
J!∑盟坚磐堕‘!女l
f《互≯ l功能删试说明书『
L压亟型圃
图l 开发过程核心流程图
3实时性适应
虽然嵌入式系统并不一定是实时的,但有大部分嵌 入式应用系统是实时系统,其时效性要求相对比较严 格,在规定的时间片内应该产生预期的动作,否则视为 无效操作。有时这种超时操作也可能造成不良后果。 嵌入式系统作为应用系统的指挥中心,对系统的灵活
嵌入式Linux系统软件移植流程
嵌入式Linux系统软件移植流程本文主要讨论Embedded Linux的系统软件移植流程,假设映象文件已经编译、链接完成。
关于映象文件及driver等的创建在其他文档中详细描述。
1.映象文件本文以X-Hyper255B开发板为例,映象文件为:x-boot255:bootloaderzImage:kernelrootfs.img:文件系统2.烧写bootloader首先需要通过JTAG把bootloader烧入目标板的FLASH中,如果PC机是Linux系统则执行以下命令:Jflash-XHYPER255 x-boot255也可以使用Windows系统的烧写程序来烧写Jflash.exe x-boot2553.bootp和fttp配置要使用bootloader通过以太网下载文件,需要在PC机(Linux系统)上建立bootp和fttp 配置。
3.1.建立bootp•在PC机上安装/XHYPER255/RPM中的bootp包rpm –i bootp-2.4.3-7.i386.rpm•在PC机上创建bootp文件/etc/xinetd.d/bootp,其内容如下:service bootps{disable = nosocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/bootpd}•创建bootptab文件/etc/bootptab,其内容如下:test:\ht=1:\ha=0x123456789A00:\ip=192.168.1.50:\sm=255.255.255.0其中,test:标号ht:硬件类型(1=以太网)ha:开发板上网卡芯片的MAC地址ip:开发板上网卡芯片的IP地址sm:子网掩码•重新启动PC的xinetd/etc/rc.d/init.d/xinetd restart3.2.建立tftp•在PC机上安装/XHYPER255/RPM中的tftp包rpm -i tftp-server-0.17-9.i386.rpm•在PC机上创建tftp文件/etc/xinetd.d/tftp,其内容如下:service tftp{disable = nosocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpboot}server_args指出了PC机存放下载文件的目录,只有该目录下的文件才能被下载到开发板上。
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系统的应用也越来越普及。
嵌入式Linux系统的移植与开发是一个非常重要的话题,本文将从以下几个方面来探讨嵌入式Linux系统的移植与开发。
1. 嵌入式Linux系统的特点嵌入式Linux系统和普通的Linux系统有着很大的不同。
首先,嵌入式Linux系统的硬件资源有限,往往只有几十兆到几百兆的存储空间和几百兆到几千兆的内存,而普通的Linux系统可以拥有无限的存储和内存资源。
其次,嵌入式Linux系统往往需要支持特定的硬件,而不是像普通的Linux系统一样,可以应对各种各样的硬件。
除此之外,嵌入式Linux系统还需要支持低功耗、实时性和稳定性等特性。
2. 嵌入式Linux系统的移植嵌入式Linux系统的移植是指将Linux系统移植到新的硬件平台上,并使其能够正常工作。
嵌入式Linux系统的移植过程包括以下几个步骤:选择适合的硬件平台,获取并配置Linux内核,编译并运行系统。
首先,选择适合的硬件平台非常重要。
不同的硬件平台有不同的处理器架构、外设接口和存储设备。
选择适合的硬件平台可以大大简化移植工作。
然后,获取并配置Linux内核也非常重要。
Linux内核是整个系统的核心,它需要支持嵌入式系统的特定硬件,并具备低功耗、实时和稳定的特性。
配置内核时需要注意的是,应该去掉不必要的模块和功能,以减小内核的大小和开机时间。
最后,编译并运行系统。
通过编译内核和应用程序,将系统镜像烧录到设备中,即可运行系统。
在此过程中需要注意的是,应该仔细检查编译过程中的错误和警告信息,以确保系统能够正确地运行。
3. 嵌入式Linux系统的开发嵌入式Linux系统的开发是指在Linux系统上进行应用程序的开发。
在嵌入式Linux系统中,应用程序需要从嵌入式设备的硬件资源获取数据,并向硬件设备发送指令。
为了实现这一点,一般需要使用本地I/O库或者驱动程序进行开发。
嵌入式Linux系统移植及应用开发技术研究
嵌入式Linux系统移植及应用开发技术研究作者:夏薇来源:《锋绘》2018年第02期摘要:随着计算机、通信及网络技术的高速发展,嵌入式系统广泛地渗透到各行各业及人们日常生活的方方面面中。
由于嵌入式系统的复杂性不断增加,嵌入式操作系统成为了嵌入式系统中最重要的组成部分。
在各种嵌入式操作系统中,凭借其性能优异,结构清晰,平台支持广泛,网络支持强劲及开放源代码等多方面的优势,被嵌入式系统开发者广泛的采用。
有鉴于此,对嵌入式Linux系统移植及应用开发技术进行研究。
关键词:嵌入式Linux;内核;设备驱动;移植随着数字信息技术与网络技术的高速发展,我们已进入数码时代。
建立在其基础之上的嵌入式系统已经广泛的渗透到科学研究、工程设计、军事技术、商业文化艺术、娱乐业以及人们的日常生活等方方面面。
嵌入式技术越来越和人们的生活紧密相关,消费电子、计算机、通信一体化趋势日益明显,作为计算机领域的一个重要组成部分,嵌入式系统再度成为研究与应用的热点,而这离不开对嵌入式系统重要组成部分的嵌入式系统软件的研究。
1 嵌入式软件开发1.1 嵌入式软件生成阶段由于嵌入式系统自身的硬件局限性,不能在嵌入式系统上直接搭建开发环境,因此,在嵌入式软件开发中通常需要两个平台,即作为开发平台的宿主机和作为运行平台的嵌入式目标机,嵌入式软件的生成阶段又可分为三个步骤源代码程序的编写将源程序交叉编译成各个目标模块将所有目标模块及相关库文件一起链接成可供目标板下载或固化的目标程序。
这三个步骤与通用计算机系统的软件开发阶段基本一致,但嵌人式软件开发又有其自身的特点为了能生成适合目标平台运行的二进制程序,对源代码的编译应使用跨平台的交叉编译器为了程序代码和数据在目标机的内存中正确定位及正确链接适合目标机的库文件,需要使用交叉链接器。
交叉编译器和交叉链接器是嵌入式软件开发不可缺少的工具。
1.2 嵌入式软件调试阶段在开发嵌入式软件时,交叉调试是必不可少的一步。
嵌入式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内核移植详解(顶嵌)
内核移植阶段内核是操作系统最基本的部分。
它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。
直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。
硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。
内核和用户界面共同为用户提供了操作计算机的方便方式。
也就是我们在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移植进程间通信研究与对策
Li n ux上必须修改。以下分两类情况提出了解决方案。
( - - ) 全局静态数据传递。首先找出任务A中所有创建或定义的全局或
静态分配的变量,其中再排除掉那些仅仅供本任务使用而无需在任务间传
递的全局量。在一个新的头文件里定义一个结构体以包含这些经过滤后的
变量。在进程A和其它使用这些变量的进程( 如B) 中都包含该头文件,对由
时执行。一般是完成某独立功能的模块。如接受键盘输入,屏幕显示,存
储卡读写等任务模块。而消息( Mes sag e) 是RTOS中任务之间数据传递的载体
和渠道,RTOS对系统存储区进行统一分配。Li nux 用户空阃进程简单说就是
运行中的程序,由内核调度分时执行.Li nux下进程间有多种通信机制可供
其它 任务 传全局 量指 针的消 息, 该消息 数据 中的指 针应 改为值 传递 。
( 二) 动态分配数据传递。另外一种需要在任务( 进程) 间进行数据交
换的情况是动态申请分配的存储空间。例如任务A负责向系统申请一块比较
大的空间,然后将此空间起始地址发送给任务B,由任务B使用该区域,如
用于语音或多媒体数据的编解码缓存。这类用例的特点是所需要的空间尺
三、I PC参纛传遵问■与对策 在实际的RTO$系统中,作为I PC传递的参 ,pa既可能是值传递,也 可能是地址传递.前者较简单,可以直接移植到Li nux 上,对于后者需要注 意,在RTOS中,存储空间或地址是由系统统一管理的,因此任务的全局变
量,堆都是统一分配的,也即这类变量的地址可以直接在任务间传递使
上述代码移植到Li nu x系统上,必须转换成Li n ux所支持的进程间通信
方式,我们知道可能的有:管道,共享内存,消息队列,信号量,套接字
嵌入式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操作系统内核移植的研究与实践姓名:***申请学位级别:硕士专业:计算机应用技术指导教师:***20040301摘要Linux内核高效稳定,易于定制,具有完善的网络通信和文件管理机制,优秀的开发工具等优点,使得Linux成为计算机领域,特别是嵌入式系统领域里的新宠。
在诸如工业控制、PDA、智能手机等领域都有一定程度的应用。
然而,在嵌入式领域中,硬件的体系结构多种多样,种类繁多。
如何使Linux能够迅速移植到新的硬件平台上成为一个亟待解决的问题。
Linux内核采用单体内核结构,并且与具体硬件平台关系紧密。
如果要将Linux内核移植到新的硬件平台上,就需要克服上述不利因素。
只有仔细研究Linux内核移植的理论,充分分析Linux内核的体系结构,尽量将内核中硬件体系结构相关的部分和体系结构无关的部分区分开来,才能保证Linux内核正确高效的移植。
论文首先详细介绍了操作系统移植的理论,并列各种类型操作系统的可移植性进行了分析。
接着概述了Linux内核移植的基本原理,详细分析了由于单体内核结构及内核硬件相关性大对Linux内核移植所造成的主要困难,并对提高Linux内核可移植性的方法进行。
了深入的阐述。
然后深入分析了Lirlux内核的体系结构和源代码树结构,据此阐述了Lintlx内核移植工作的主要内容和方法。
最后,以Linux在Enet.SHl目标板上的移植和调试为例,对Lirmx内核移植的理论进行了完整的实践。
关键词:LiFlUX内核;移植:SH7750AbstractLinuxhasastableandeffieientkernel,aperfectnetworkandfilemanagementmechanism,andexcellentdevelopmenttoolS,whichmakeLinuxbecomethefavoritesysteminthecomputerscopes,especiallYintheembeddedsystemscopes.LinuxiSusedwidelYinindustrycontrol,PDA,intelligentmobilephone,andSOonButtherearelotsofkindsofhardwarearchitecturesinembeddedsystemscopes.HowtOportLinuxkerneltothenewarehitectureinashorttimebecomesurgent.LiFlUXkerneliSmonolithiCkernel,anddependsonthehardwarePletform.IfthekerneliSportedtothenewhardwarePlatform.thediffiCUltiesmentionedabovemnstbeovercome,BasedontheresearchontheLinuxkernelportingtheory.theanalYSiSoftheLinuxkernelarchitecture.andthediviSionbetweenthepartrelatedwithhardwareandtheunreiated.thekernelcanbeportedcorrectIv.SomevaluableresearchontheoperatingsystemportingtheoryandtheLinuxkernelportingprincip]mswillbedescribedinthethesiS.First,theoperatingS"Siempot’tingtheo_r‘YiSpresented,andtheportabilityofa11kindsofoperatingsystemsiSanalyzed.ThentheLinuxkernelportingprincipleiSsummarized.ThediffiCUltiescausedbvthekernel’SmonolithiCarchitectureandthereIativitvofthehardwareareanalyzed,andthemethodtoimprovetheportabilitYofthekerneliSexplained.I。
Linux体系结构及嵌入式Linux的移植方法
2016年第1期信息与电脑China Computer&Communication计算机工程应用技术同传统的电脑操作系统相比,嵌入式操作系统非常不一样。
在嵌入式操作系统的设计方面,具有灵便小巧的特点,却可以在功能方面媲美传统电脑的操作系统。
嵌入式操作系统可以软件固化,从而实现特殊功能的定制。
因此,嵌入式操作系统在很多方面都获得了较好的应用效果。
嵌入式操作系统具有较高的工作效率,可以依据应用环境的区别进行适当定制,从而更好地满足实际需求。
嵌入式操作系统可以在进行代码编译和执行等过程中具有更高的运算速度,所以其在代码编译方面优点较多。
Linux 操作系统是嵌入式操作系统的典型例子,Linux 系统凭借其自身优势已经融入到了嵌入式系统各个应用场景中。
1 Linux操作系统体系及特点1.1 Linux 内核的体系结构1.1.1 进程调度Linux 内核在整个操作系统工作过程中发挥着至关重要的作用,这是由于几乎全部的进程和线程都同Linux 内核有着非常紧密的联系。
在Linux 系统开始运转后会有较多的进程一般是用户不能随意更改的,也就是守护进程。
守护进程使得用户不能随意更改进程的目的是确保Linux 系统的安全,避免进程的随意改变。
由此可知,内核无疑在Linux 系统的调用方面发挥了至关重要的安全保护作用。
通过对资源进行合理分配,时时掌控系统状态,确保系统能够更好的运转。
1.1.2 存储机制任何一个系统,为了确保系统的运转能够有序进行,需要程序进行控制。
而这些发挥控制作用的程序需要足够的存储空间。
所以,要在Linux 的内核结构中创造足够的存储空间,从而可以把系统运转需要的各种代码程序进行有序存储,保证系统能够正常发挥作用。
1.1.3 网络服务Linux 系统在工作的时候,允许用户借助于串口通信的方式或者使用网络通信的方式进行对话。
所以,系统内核中无疑需要存在一个较为复杂的网络服务系统。
该网络服务系统的作用是确立通信协议,遵循通信协议确保对话各方的传输层、数据链路层等正常工作。
嵌入式Linux内核移植
内核移植关键的步骤就在于配置哪些选项是必须选择,哪些选项是不用选的。实际上在配置时,大部分选项可以使用其默认值,只有少部分需要根据用户不同的需要选择。选择的原则,是将与内核其它部分关系较远且不经常使用的部分功能代码编译成可加载模块,有利于减小内核的大小,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。不需要的功能就不选,与内核关系紧密而且经常使用的部分功能代码直接编译到内核中。
内核MTD分区必须与vivi分区相一致。因为,vivi分区中的地址是引导程序、内核映像及文件系统下载到Nand Flash的真正地址;而内核启动时,内核并不是去读vivi分区中的地址,而是去读内核MTD分区设定的地址;所以,如果内核MTD分区与vivi分区不相同,很可能导致不能正常启动内核及读取文件系统。
.offset = SZ_1M* 48,
.size = SZ_16M,
}
#endif
};
默认情况下分了8个区,而我们需要规划其中的6个分区,因此将后面的部分用#if 0和#endif包含起来,暂时不使用。在设置每个分区的大小(.size)和偏移量(.offset)时要小心,不要导致分区重叠,并且内核和跟文件系统的偏移量设置与BootLoader中的设置保持一致,其原因上面已经分析过了。
实验目的了解linux内核源代码的目录结构及各目录的相关内容了解linux内核各配置选项内容和作用掌握linux内核配置文件的作用掌握linux内核的编译过程掌握将新增内核代码加入到linux内核结构中的方法实验指引尽管目前linux26版本内核已经增加了很多对arm体系甚至是s3c2410cpu的支持但仍然需要对内核作一些小的修改来适应我们的开发板并且需要重新配置编译和重新生成新的内核映像
基于ARM的嵌入式Linux系统移植技术研究与应用.
电子科技大学硕士学位论文基于ARM的嵌入式Linux系统移植技术研究与应用姓名:钱连举申请学位级别:硕士专业:计算机应用技术指导教师:江春华20060103摘要摘要近年来,随着计算机技术、通信技术的迅速发展,特别是互联网的迅速普及和3c(计算机、通信、消费电予)合一的加速,微型化和专业化成为发展的新趋势,嵌入式系统开发己经成为了信息产业的热点。
基于ARM硬件平台及Linux操作系统的嵌入式产品应用开发已成为主流。
而在嵌入式的开发过程中,针对目标平台的操作系统移植成为影响嵌入式产品开发进度的一个关键因素。
本文正是基于上述现状,对基于ARM平台的Linux系统移植技术进行了全面的分析,对系统引导、文件系统等诸多方面的移植进行了研究与实现。
主要工作包括:1.系统分析了Linux内核的结构、各功能模块及其对系统移植的影响,并总结分析了内核对系统移植的支持和限制。
2.提出了在Linux下进行系统移植的内容、重点及基本方法,分析了Linux源代码树与ARM系统移植的相关性。
3.剖析了嵌入式Linux系统引导、内核启动、设备驱动、文件系统等相关技术。
4.在此基础上,对Linux向目标平台的系统移植进行了实现。
关键词:嵌入式系统,Linux,ARM,系统移植,内核AbstractAbstractRecently,alongwiththefastdevelopmentofcomputerandcommunicationstechnology,especiallyrapidpopularizationofIntemetandsyncretismaccelerationofspecializationturnintothe3C(ComputerCommunication&ConsumeElectric),micromationandbecomethemaindevelopingtrend,atthesanletime,embeddedproductstothemainstreamofinformationindustry.Systemportingtarget‘platformisthemainfactorwhichaffectstheprocessofembedded—systemsdevelopment.AStheaboveissues,thisthesismakesadetailedanalysisattheoriesandtechniquesforportingLinuxtoARMembeddedSystem.ThisthesisalsoexploresandimplementedtheportingofBootIoader.filesystemandotherparts.areThemainresultsasfollows:1.ThearchitectureofLinuxiSanlyzed,andthetelationofthemwithLinuxtOLinuxkernelportingispresentedindetail.Thesupport+sandrestricationofportingisintrducedtoo.2.Thecontent,emphasisandbasicapproachresourcearesystempresented.ThenthetreeofthecodesofLinuxisporting.analyzed,especiallythepartswhichhasmuchrelationwithARMsystem3.ThesystemareportingtechniquesofBootloader,kemel’sstartup,devicedriver,fileanalyzedindetail:4.Finally,theimplementationoftargetplatformisgNenKeywords:EmbeddedSystem,ARM,Linux,Systemporting,KernelII独创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式Linux在SH4架构下的移植技术研究作者:王若关胜晓刁智华来源:《现代电子技术》2008年第24期摘要:SuperH系列微处理器是Renesas公司(原Hitachi)开发的采用了RISC系统指令集的32位系列微处理器。
详细介绍SH4系列交叉编译平台在新版本编译器下的配置过程,提出一种适用于SuperH系列微处理器的通用的内核移植的方法并研究Linux 2.6内核在SH4系列微处理器SH7751上的移植方案。
实验证明该方法可行,移植过程也对其他平台有借鉴作用。
关键词:SuperH;Linux2.6;嵌入式系统;内核移植中图分类号:TN21;TP311文献标识码:A文章编号:1004-373X(2008)24-058-03Research of Porting Embedded Linux Based on SH4WANG Ruo,GUAN Shengxiao,DIAO Zhihua(USTC-Renesas Joint Library,University of Science and Technology ofChina,Hefei,230026,China)Abstract: SuperH is a series of 32bit RISC MPU production of Renesas Company.The paper provides a method of porting embedded Linux kernel 2.6 to SH7751 and introduces the way of establishing crosstool in SH4 series MPU.The result proves it viable and helpful to other architecture of MPUs.And the migration process is also helpful to the other platform.The paper presents a common core transplant method applicable to series of SuperH microprocessor.Keywords:SuperH;Linux2.6;embedded system;core transplant1 引言Renesas公司的SuperH系列微处理器是由原Hitachi公司设计开发,由SuperH公司提供CPU技术支持。
SH7751属于微处理器SH4系列,有着较高的工作频率和处理性能(430 MIPS/ 240 MHz)。
Linux 2.6内核相对于先前版本的内核在可配置性方面有了较大的改进,内核的可抢占和响应时间的改进使其在应用软件性能上更加优异。
由于支持高档的电源管理APM,就为各种手持设备和对电源管理比较严格的嵌入式系统提供了良好的平台支持,越来越多的嵌入式系统陆续将Linux2.6作为开发的基础平台。
因此将新内核移植并建立开发环境成为进行嵌入式系统开发首先要进行的工作。
一般对内核移植的具体工作可以分为3个步骤:建立交叉编译工具链(Toolchain);内核的配置和剪裁;建立根文件系统并配置bootloader。
SH系列微处理器进行嵌入式Linux移植也是按照上述3个步骤进行,但在新版本编译器环境下移植Linux2.6过程与先前版本的配置有较大差。
2 交叉编译环境的建立2.1 交叉编译源文件和工具的选取交叉编译是指在宿主机器(Host)上生成针对特定平台代码(Target)的过程。
实验中使用的是x86平台下的debian4.0的宿主机对SH4系列平台代码进行交叉编译,从而生成在SH4系列MPU上可运行的代码。
进行交叉编译的一系列工具即称为交叉编译工具链。
交叉编译工具主要由binutils,gcc 和 glibc组成。
由于SH4系列微处理器应用较少,一些著名的交叉编译工具如CLFS,crosstool均未提供对SH4系列环境的支持。
有较多的SH系列微处理器开发板厂商提供了对Linux的开发工具包,但提供的大都是2.4版本的内核,并且无法及时得到社区的技术支持。
实验中使用Renesas公司的EDOSK7751R开发平台,移植中选取负责SH架构Linux内核团队2007年5月发布的内核稳定版本linux-sh-2.6.20。
在选取C库过程中由于稳定性考虑选取标准库glibc,glibc-sh中INSTALL文件指明了binutils和gcc的最低版本和推荐版本,实验中选取的binutils版本为2.17。
与内核的选取不同,gcc的选取并不建议选用最新的版本,这是因为可能在选用的其他工具软件进行具体调试中很多陈旧代码可能在新编译器下编译链接错误较难解决。
在实验中选择的是gcc4.1.1及gcc的Sh4补丁。
实验中使用的源文件和补丁如下:binutils-2.17.50.tar.gzbinutils-2.17.50-sh4-linux.tar.gzgcc4.1.1.tar.gzgcc4.1.1-sh4-linux.tar.gzglibc-2.5.3.tar.gzglibc-2.5.3-sh4-linux.tar.gzglibc-linuxthreads-2.5.3.tar.gzglibc-headers-2.5.3.tar.gzglibc-headers-2.5-3.sh4.tar.gzlinux-sh-2.6.20.10.tar.gz2.2 内核头文件的生成。
首先建立工作目录和一些环境外部变量:$export PREFIX=/home/ruo$export PATH=${PREFIX}/usr/bin:${PATH}内核头文件是交叉编译的基础文件,在较早版本的Linux(如2.4)中交叉编译中一般通过对内核的配置生成。
在Linux2.6环境下配置完内核后,版本头文件version.h要单独建立,否则后期glibc无法安装。
解压linux-sh-2.6.20.10.tar.gz并运行指令:$tar –xzf linux-sh-2.6.20.10.tar.gz$cd linux-2.6.20$make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig$make include/linux/version.h$install -dv ${PREFIX}/usr/include/{asm,asm-generic,linux,rdma,mtd,sound,video}配置“Processor selection”选择“support SH7751 processor”,另外根据SH7751系列不同型号CPU的用户手册配置其他内核选项。
配置完成保存退出后,建立版本头文件。
运行后可查看/include/linux/文件夹中是否生成autoconf.h和version.h是否生成而判定内核头文件是否创建成功。
将生成的头文件中asm,asm-generic,linux,rdma,mtd, sound,video七个目录拷贝到工作目录${PREFIX}/usr/include中。
2.3 建立引导编译器(bootstrap gcc)binutils是一组二进制工具集合,将binutils-2.17和补丁解压后,打完全部补丁,然后即可安装生成交叉编译的二进制工具集合。
将libiberty.h文件拷入内核头文件库中,编译后期gcc 使用。
命令参数如下:$cd binutils-2.17-sh4-linux$patch -p1 < ../binutils-2.17-sh4-linux.patch$patch ....(省略)$cd ..$../binutils-2.17/configure --prefix=${PREFIX}/tools --target=sh4-linux--disable-nls --enable-shared --disable-multilib$make$make install$cp -v include/libiberty.h ${PREFIX}/usr/include与先前版本不同,gcc3.2后版本安装引导编译器必须要获得glibc的支持。
而glibc库又依靠gcc交叉编译。
为解决这个问题,glibc提供了头文件供gcc初始编译器使用。
在编译引导编译器前,首先要安装glibc-headers。
注意此过程并非交叉编译glibc,因为没有gcc引导编译器是无法进行的。
与binutils设置不同,安装中参数“--host”必须设定为目标平台架构“sh4-linux”,这样才能告诉gcc编译出符合目标系统的信息。
在对glibc-headers解压和补丁处理后,安装并在工作目录中建立假文件stubs.h。
拷贝pthreadtypes.h文件到内核头文件中提供本地POSIX线程库支持,以便后期编译glibc。
命令参数如下:$CC=gcc ../glibc-2.4/configure --prefix=${PREFIX}/tools--host=sh4-linux --with-headers=${PREFIX}/usr/include$make install-headers$install -dv ${PREFIX}/usr/include/bits$touch ${PREFIX}/usr/include/gnu/stubs.h$cp -v nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h${PREFIX}/usr/include/bits当glibc头文件安装完毕,即可安装引导交叉编译器。
引导编译器仅是一个C语言的编译器,作用是对glibc进行交叉编译,然后使用编译后的glibc生成完整的支持C++的gcc完整交叉编译器(full gcc)。
解压并打好补丁后修改对可能使用的某些共享库的搜索目录,以便在后期建立完整交叉工具链能直接找到共享库。
在/gcc/config/sh/linux.h文件第46行后添加:#undef LIB_SPEC#define LIB_SPEC“%{!static:%{!m4:-rpath-link /usr/sh4-linux/lib}%{m4:-rpath-link /usr/sh4-linux/lib/m4}}”然后进行配置安装:$../gcc-4.1.1/configure --prefix=${PREFIX}/tools--target= sh4-linux --build= i686-linux--disable-multilib --disable-nls --disable-shared--enable-languages=c$make all-gcc$make install-gcc2.4 建立完整的交叉编译工具链(full gcc)在bootstrap gcc的安装完成后,就可以完整地交叉编译glibc了。