当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]PXA255的嵌入式Linux应用平台的构建

1 引言

嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁剪后,能够固化在容量仅有几十万字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式Linux是由很多体积小且性能高的微内核系统组成,在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要很容易地对内核进行改造,在低成本的前提下,设计和开发出真正满足自己需要的嵌入式系统。

随着电子市场的发展壮大,高性能低功耗的多媒体手提设备和无线设备越来越受到市场的欢迎,Intel XScale PXA255处理器正是针对这一情况推出的。它采用Intel XScale微结构体系框架,采用ARMV5TE的7级超流水线,可以工作在200MHz、300MHz、400MHz下,集成了许多常用的外围接口,功能强大。本文将介绍如何在Intel XScale PXA255上构建嵌入式Linux应用平台。

一个嵌入式Linux系统的构建由以下步骤组成:加载Bootloader引导程序、交叉编译环境下加载和编译Linux内核和与之配套的根文件系统等,下面就逐步介绍各个步骤的实现情况。

2.1 加载Bootloader引导程序

 Bootloader引导程序是系统加电启动后运行的第一段软件代码。回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。而在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由Bootloader来完成。Bootloader的启动流程一般分为两个阶段:stage1和stage2。在 stage1中的代码通常用汇编语言实现,以提高系统运行的效率,而stage2中通常用C语言实现,目的是实现更复杂的功能和取得更好的代码可读性和可移植性。

在stage1中Bootloader主要完成以下工作:

项目基金:国家自然科学基金(50678099)
(1)基本的硬件初始化。
(2)为加载stage2准备RAM空间。
(3)拷贝stage2到RAM空间中。
(4)设置堆栈指针sp,这是为执行stage2的C语言代码做好准备。

在stage2中Bootloader主要完成以下工作:(1)用汇编语言跳转到main入口函数。(2)初始化本阶段要使用到的硬件设备。(3)检测系统的内存映射。(4)加载内核映像和根文件系统映像。(5)设置内核的启动参数。

本平台中的Bootloader选择的是U-Boot(Universal Bootloader),是遵循GPL条款的开放源码项目。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的 Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中就能体现这一点。就目前为止,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。

http://sourceforge.net/projects/u-boot下下载最新版本的U-Boot,移植之前需要仔细阅读u-boot目录下的readme文件,其中对如何移植做了简要的介绍。为了减少移植的工作量,可以在include / config目录下选一个和要移植的硬件相同或相似的开发板,根据硬件平台的配置情况和参考现有的源码,对配置文件进行修改和配置,如修改和配置 FLASH信息、SDRAM信息、网络配置、处理器配置、中断、开发版参数设置等。之后用make命令生成映像文件下载并烧写到FLASH中。

2.2 交叉编译环境下加载和编译Linux内核

2.2.1 建立交叉编译环境

所谓交叉编译是指当主机系统和目标系统的体系结构与操作系统不兼容时,将在主机系统上编译的可执行程序应用到目标系统上运行的编译方法。嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。所以需要建立交叉编译环境,下载hybus- arm-linux-R1.1.tar.gz到/usr/local目录下。
# cd usr/local
# tar zxvf  hybus-arm-linux-R1.1.tar.gz

生成hybus-arm-linux-R1.1目录,然后在/root/.bash_profile下修改添加以下路径:
PATH=$PATH:/usr/local/ hybus-arm-linux-R1.1/bin
export PATH

至此,交叉编译环境建立完成。

2.2.2  加载和编译Linux内核

Linux系统的内核采用单块结构,可以动态地加载和卸载模块。系统利用内核模块的可动态加载和卸载功能,可以方便地在内核中添加新的组件或卸载不再需要的内核组件。内核模块的动态装载性使得内核映像的尺寸保持在最小,并且具有最大的灵活性,同时便于检验新的内核代码,而不需重新编译内核且重新引导,从而用户可以根据自己系统的需要构筑自己的私有内核,其源码的公开更为改造其内核提供了可能,尤其为重建有特殊要求的操作系统提供了可能。Linux的内核版本发行同Linux对嵌入式处理器支持程度的发展是不同步的,因此需要对特定的处理器体系结构选择适合的内核,在本文中选用2.4.18的内核版本,下载已经打好补丁的内核资源linux-2.4.18-rmk7.tar.bz2。
# tar jxvf linux-2.4.18-rmk7.tar.bz2
# cd linux-2.4.18-rmk7
# make menuconfig
# make dep
# make zImage

完成后在arch/arm/boot 路径下生成映像文件zImage,下载到开发平台上并烧写到FLASH中。

[!--empirenews.page--]

2.3 配置根文件系统

Linux并不使用设备标志符(如设备号或驱动器名称)来访问独立文件系统,而是通过一个将整个文件系统表示成单一实体的层次树结构来访问它。一个根文件系统需要包含支持Linux系统运行的所有文件,通常包括:
(1)基本的文件系统结构。
(2)基本的目录: /dev, /proc, /bin, /sbin, /etc, /tmp等。
(3)基本的工具: sh, ls, cp, cd, mv等。
(4)基本的配置文件: rc, inittab, fstab等。
(5)设备: /dev/hd*, /dev/tty*, /dev/fd0, /dev/ram*, /dev/console等。
(6)基本的运行库。

为了建立根文件系统,可以利用BusyBox工具,在网上下载最近版本busybox-1.1.0.tar.gz,一些主要步骤如下:
#tar zxvf busybox-1.1.0.tar.gz
#cd busybox-1.1.0
#make menuconfig

在build Options菜单下,可以选择静态库编译方式

[*]Build BusyBox as a static binary (no shared libs)

还需要使用带glibc库支持的交叉编译器arm-linux-gcc

[*]Do you want to build BusyBox with a Cross Compiler?
/usr/local/hybus-arm-linux-R1.1/bin/arm-linux-

在installation Options中选安装路径,默认是_install目录
[*]Don't use /usr
(./_install)BusyBox installation prefix

之后选择一些需要的编译命令后就可以编译BusyBox了。
#make dep
#make
#make install

完成后生成_install目录,目录下有bin linuxrc sbin目录,下面介绍对根文件系统的进一步配置:

建立etc目录
#mkdir etc

建立rc文件,内容如下:
#!/bin/sh
hostname XScale
mount -t proc proc /proc
cat /etc/motd
改变rc属性
#chmod 777 rc

建立inittab文件,主要内容如下:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdowm:/bin/umount -a -r
::shutdowm:/sbin/swapoff -a

在init.d目录下,建立rc文件的符号连接文件rcS
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

刚入门嵌入式,选入门级RZ/G2L开发板,采用邮票孔形式封装了RZ/G2L核心板。

关键字: 开发板 嵌入式LINUX 嵌入式系统

整理自网络,排版:付斌 对嵌入式系统工程师及嵌入式硬件工程师而言,2020年将是振奋人心的一年。随着物联网应用的普及,MCU市场将再次繁荣。因此,市场上对嵌入式系统工程师人才的需求也将出现新高。这些都是底层编程领域中即将...

关键字: 嵌入式 软硬件 BSP 嵌入式LINUX

[导读] 前文分析了Linux设备驱动的驱动模型,本文来聊聊Platform_driver/Platform_device这个类。做嵌入式Linux的驱动,这个也是绕不开的,所以来学习分析总结一下。 阅读本文,建议先读:...

关键字: DEVICE PLATFORM 嵌入式LINUX LINUX驱动

随着Internet的飞速发展,网络应用越来越广泛,对各种工业控制设备的网络功能要求也越来越高。当前的要求是希望工业控制设备能够支持TCP/IP以及其它Internet协议,从而能够通过用户熟悉

关键字: 区块链 应用程序 嵌入式系统 嵌入式LINUX

日前,日本知名直播平台SHOWROOM的开发公司DeNA宣布完成31亿日元融资。本轮融资来自于日本电通、日本放送、Akatsuki Corporation、孵化器Dream Incubator、

关键字: VR技术 STAGE BAT RATIO

CC2640 R2是德州仪器推出的面向 Bluetooth Smart 应用的低功耗无线 MCU。该芯片运行TI的BLE协议栈,具有功耗低,外设种类丰富,射频性能好等特点。利用它可以实现许多有趣的应用,收到了用户的广泛欢...

关键字: 芯片 烧写程序 BOOTLOADER KD

推荐语 最近在充电,没来得及输出笔记。本次先给大家带来一位前辈的嵌入式Linux学习经验及一些学习资料清单,跟着大佬走不迷路。这份资料清单有点长。。。 下转原文: 嵌入式 Arm Linux 入门必读书籍推荐 前段时间有...

关键字: 嵌入式LINUX 内核 KERNEL 命令行

开号两月有余,将推送的文章做些总结方便阅读。文章数量还不多,但每天文章都是非常认真撰写的,文中所含观点大都是工作多年的经验总结,现在无偿分享给朋友们,或许能帮助到朋友们。 之一:数字滤波器系列,建议深度阅读,嵌入式开发进...

关键字: BSP U-BOOT 嵌入式LINUX ROOT

偶尔会推荐下相关的职位,也有小伙伴真的找到了工作,今天继续给大家推荐一个匹配的岗位。 如果你在找/换工作,建议认真准备一下简历。 公司名称: 易视智瞳科技(深圳)有限公司 职位: 嵌入式linux - 机器视觉软件开发工...

关键字: 视觉软件 软件开发 机器视觉 嵌入式LINUX

嵌入式ARM 本公众号主要传播嵌入式相关技术内容,包括不仅限于C/C++语言编程、ARM、Verilog、VHDL、Linux、单片机MCU、驱动硬件、项目开发。 嵌入式ARM的文章应该很多同学都有直接或者间接的看到过,...

关键字: 嵌入式LINUX Android 硬件 IC
关闭
关闭