Chinaunix首页 | 论坛 | 博客
  • 博客访问: 302285
  • 博文数量: 163
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-23 17:54
个人简介

做一个“好”人... 思想上会思考; 生活上有追求; 技术上不停步; 工作上有担当;

文章分类

全部博文(163)

文章存档

2016年(1)

2015年(143)

2014年(19)

我的朋友

分类: LINUX

2015-11-30 23:47:34

自己动手打造嵌入式Linux软硬件开发环境

改编自


Linux和uClinux
Linux正逐渐地应用于嵌入式设备,uClinux正是在这种氛围下产生的。uClinux就是Micro-Control-Linux,它也是一个开源项目,uClinux的源代码和开发工具可以免费从上下载得到。
uClinux是专为那些没有MMU(内存管理单元)的嵌入式处理器开发的,和主流的Linux相比,uClinux有以下的特点:
1. 简化了内核加载方式,uClinux的内核可以在Flash上直接运行:就是把uClinux的内核的可执行映象烧写到flash上,系统启动时从 Flash的某个地址开始逐句执行;也可以加载到内存中运行:把内核的压缩文件存放在Flash上,系统启动时读取压缩文件在内存里解压,然后开始执行。

2.采用了romfs文件系统作为root文件系统:这种文件系统相对于一般的ext2文件系统要求更少的空间,首先内核支持romfs文件系统 比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,建立文件系统superblock需要更少的存储空间。Romfs文件系统不支 持动态擦写,对于系统需要动态保存的数据采用RAM盘的方法处理,RAM盘采用ext2文件系统。

3.使用了Flat可执行文件格式:elf格式有很大的文件头,flat文件对文件头和一些段信息做了简化。

4.重写了应用程序库: uClibc对libc做了精简,uClinux对用户程序采用静态连接的形式。

uClinux的开发环境
为uClinux提供了GNU的交叉编译器,包括以下组件:

gcc交叉编译器,即在宿主机上开发编译目标上可运行的二进制文件;

binutils辅助工具,包括objdump、as、ld等;

gdb调试器

以在ARM7上开发uClinux为例:
1.获得 uClinux-dist的源码包

上定期为新推出的Linux内核推出相应的源码包,最新的版本为Kernel-2.4.21,可以从/pub/uClinux/dist/ 上免费下载得到。这个源码包里包含了uCLinux-2.4.21、uClibc和已经移植到uClinux下的用户应用程序。下载完后,会得到一个 uClinux-dist-20030522.tar.gz的文件,把它保存到/home目录下,然后执行:tar zxvf uClinux-dist-20030522.tar.gz,当tar程序运行完毕后,在/home目录下会有一个/home/uClinux-dist 的新目录,这个目录就是uClinux的源码根目录,里面有进行uClinux开发的所有的源代码。
2.获得ARM开发工具

提供uClinux源码的同时还提供相应的交叉编译工具。

要在开发主机上为ARM7目标系统编译uClinux,还需要从/pub/uClinux/arm-elf-tools/ 上下载ARM交叉编译器:arm-elf-tools-20030314.sh. 得到这个文件以后,执行以下命令:sh arm-elf-tools-20030314.sh,这个命令会在开发主机上自动建立一个uClinux-ARM的交叉编译环境。键入arm-elf- gcc, 如果能看到下面的输出信息:
Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specsgcc version 2.95.3 20010315 (release)
(ColdFire patches - 20010318 from XIP and shared lib patches
from
表示uClinux-ARM的交叉编译环境已经建立起来了。

现 在开发主机里已经有了uClinux的源代码和编译这些源代码的工具,也可以用make menuconfig, make等命令来编译uClinux和用户程序,为ARM目标板编译了一个内核映像文件,接下来要做得是需要一块ARM7的开发板来运行这个映像文件(关 于如何编译uClinux和用户程序请参考上得相关文档)。

构建ARM7-uClinux开发板
uClinux只需要极少的硬件资源就可运行起来,以ARM7TDMI为例,只需要以下硬件:
1.CPU – Samsung S3C4510B
2.SDRAM 8M以上
3.一个简易的串口
4.2M Flash
5.一个以太网接口(可选)
目 前各嵌入式微处理器的厂商在推出每款处理器的同时都会提供一个Demo板,供用户来测试微处理器的性能。Samsung公司对S3C4510B处理器提供 了一款SNDS100的Demo板。Demo板的原理图可以从Samsung公司的网站上免费下载,对这个原理图作一些修改,只保留上面列出的5个部分, 去掉其他多余的部分。修改以后的原理图就是一个能够运行uClinux的ARM7目标板原理图,然后根据这个原理图去加工几张PCB板,焊上相应的元件, 一块能运行uClinux的ARM7开发板就做成了(这款开发板相应得原理图、PCB图可以从上免费下载得 到)。
慢着,虽然这块开发板已经焊接完成,但目前它只是一堆电子零件的简单组合,要在它上面跑uClinux,还需要相应的软件来管理这些硬件。
前 面提到uClinux可以从Flash中直接运行,就是说可以将uClinux的映像文件直接烧写到Flash中,然后上电,uClinux会从 Flash中启动吗?是的,确实如此。现在要做的就是如何将uClinux的内核映像烧写到Flash中。用写入器将uClinux内核映像写入到 Flash中,然后将Flash焊接到pcb板上或插到开发板的flash的插座上可以吗?当然可以,如果你有写入器的话。不过,很少有人手里能有这种写 入器。我们需要的是一个廉价的Flash写入方案。用JTAG,S3C4510B上集成了一个JTAG,通过JTAG我们可以控制S3C4510B上所有 管脚,这样可以通过向JTAG接口输入相应的指令和数据,用软件的方法在S3C4510B的数据、地址和控制总线上产生出Flash器件的读写操作时序, 将uClinux的内核映像文件烧写到Flash中(关于S3C4510B的JTAG接口电缆的制作和下载烧写uClinux映像文件到Flash中的程 序可执行文件和源代码请参阅上相关内容)。

终于将uClinux的映像文件烧写到Flash中了,用一根串口电缆将ARM7开发板和开发主机的Com1口连接起来,从网上下载一个tip程序,执行这个命令:
tip –l /dev/ttyS0 –s 19200
等屏幕上显示 connected.以后,将ARM7开发板的电源接通。如果够幸运的话,你应该看到下面的信息:
>>Linux version 2.4.20-uc0 (root@dailzh) (gcc version 2.95.3
>>20010315 (release)(ColdFire patches - 20010318 from
>>(uClinux XIP and shared lib patches from 一 5月19 23:44:11 CST 2003
>>Processor: Samsung S3C4510B revision 6
>>Architecture: SNDS100
>>On node 0 totalpages: 4096
>>zone(0): 0 pages.
>>zone(1): 4096 pages.
>>zone(2): 0 pages.
>>Kernel command line: root=/dev/rom0
>>Calibrating delay loop... 49.76 BogoMIPS

>>Command: cat /etc/motd
>>Welcome to uClinux.org
>>For further information check:
>>\>
uClinux在ARM7目标板上已经运行起来了,键入熟悉的ls命令,看有什么输出。

通 过JTAG接口烧写uClinux映像文件到Flash中速度太慢,调试uClinux内核非常不方便,有没有其他的方法?有,uClinux除了可以从 Flash中直接运行外,还可以加载到内存中运行。我们来为ARM7开发板写一个Bootloader,Bootloader的作用是初始化ARM7开发 板,然后通过以太网接口将uClinux映像下载到内存中,然后从内存中运行uClinux。这种方法下载uClinux内核映像只需要10几秒,适合于 开发阶段经常修改uClinux内核时使用(Bootloader for ARM7的源代码可以从 上下载得到)。调试完uClinux的内核以后,可以再通过JTAG接口烧写uClinux映像文件到Flash中,这样又可以直接从Flash中运行调 试好的uClinux了。

uClinux下用户程序的开发和调试
现在ARM7开发板可以运行uClinux了,如何开发 uClinux下的应用程序呢?和在普通计算机上开发Linux程序一样,首先编写应用程序的源代码,只不过编译的时候不能用gcc编译,需要用arm- elf-gcc编译。编译以后的可执行文件必须下载到ARM7开发板上才能运行,下载程序到目标板上可以通过在uClinux中启用tftpd程序,在开 发主机端用tftpcmd 程序来下载,然后在uClinux的控制台窗口键入可执行文件名的方法来运行。如果想要应用程序在uClinux启动时自动运行,可以修改uClinux 系统中/etc/rc文件的内容来来实现。如果要用gdb来调试用户程序,可以参考上的相关文档。

关于原作者
dai lizhou , 爱好嵌入式系统和Linux开发, 如果你对嵌入式Linux开发有兴趣请访问我们的网站, 诚邀你的加盟。

阅读(1102) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~