当前位置:资讯 > 嵌入式系统 > 正文

基于ARM的嵌入式设备中uCLinux系统开发

发布时间:2006-09-21     作者:高荣山 张颜岭      

摘要:    信息家电和手持设备大大加速了嵌入式系统的发展,而ARM体系32位高性能、低功耗处理器和嵌入式操作系统Linux无疑成为佼佼者。因为Linux源代码开放、免费,任何将其定制于PDA、掌上机或者便携式设备感兴趣的人都可以从因特网免费下载其内核和应用程序,并开始移植或开发,所以Linux在嵌入式开发领域得到稳步发展。uCLinux 即是目前嵌入式linux 中最流行的一种,它是针对微控制领域而设计的Linux系统,其最大特征就是没有MMU(内存管理单元模块),适合嵌入式系统小型化应用。
环境下编译。
开始编译uClinux
编译内核:执行命令:
make menuconfig 在出现的对话框选Samsung/4510B 和 uC-libcCONTROL ENGINEERING China版权所有,然后退出。如果选择uC-libc编译出错,可以改选uClibc!
   make dep
   make lib_only  
   make user_only
   make romfs
   make image 产生 romfs.o,这一步将会出现一些错误报告,可忽略继续下面的命令
   make
如果make无错误,在images的目录下你会看到有 image.ram 和 image.rom 两个二进制的内核文件。即image.ram和image.rom。 image.ram可以通过Bootloader下载到SDRAM中运行。image.rom可以写入到Flash SST39VF160中直接运行。
down image.ram看看能不能运行
    最后一步
,uClinux调试完毕,通过jflashp将其写入到Flash中:开发板断电,把JTAG仿真器接到计算机的并口和板子的14Pin JTAG插座上;接通5V电源;执行 FlashP w -f image.rom,大约30分钟以后烧写完毕。撤掉JTAG仿真器以后再上电就应该运行uClinux了。如果想把BootLoader写回Flash,执行FlashP w -f bios.img即可。
4 uCLinux驱动程序开发
    嵌入式系统通常有许多设备用于与用户交互,象触摸屏、小键盘、滚动轮、传感器、RS232 接口、LCD 等等。除了这些设备外,还有许多其它专用设备www.cechina.cn,包括闪存、USB、GSM、GPS 等。内核通过所有这些设备各自的设备驱动程序来控制它们,包括 GUI 用户应用程序也通过访问这些驱动程序来访问设备。uClinux 的驱动程序库不可能包括实际项目系统中所有外围硬件的驱动,所以在应用开发中,编写驱动程序是一个重要步骤,驱动程序设计的好坏直接影响系统运行的稳定性和运行效率。
    在uClinux 内核编写驱动程序并不像其他操作系统那么复杂www.cechina.cn,实际上,所要做的只是为相应的设备编写几个基本函数并向VFS(virtual file system) 注册即可。当上层应用要使用该设备时控制工程网版权所有,VFS 就会调用相应的设备函数。设备驱动程序通常可归为以下3 类:
a) 块设备(block) ,以块为单位,允许随机访问,多用缓存技术;
b) 字符设备(char) ,以字节为单位,只能按顺序访问控制工程网版权所有,不用缓存;
c) 网络接口(net) 。
    在本系统中,DOC作为块设备可被模拟为IDE设备进行识别,系统用主设备号(MAJOR)和次设备号(MINOR)来唯一标识一般设备;相同主设备号表示同一类设备,次设备号表示同类设备的个数。所有设备在适当的目录(通常是/dev目录)下必须有相应的文件,这样字符设备和块设备都可以通过文件操作的系统调用完成。不同的是,块设备操作经常和缓冲区联系在一起。
    字符设备的驱动程序通过在device_struct数据结构的chrdevs向量中增加一项的方法来向内核注册自己。然后对这个设备的所有调用都用这个设备号来实现;
    块设备和字符设备都需要定义功能函数:对于每一个驱动函数来说,都有一些和此设备密切相关的功能函数,就最常用的字符设备来说,都存在着诸如open()、read()、write()、ioctrol( ) 这一类的操作。当系统调用这些操作时,将自动的使用file-operations 结构中对应的函数来实现具体的操作;块设备由于使用高速缓存,其驱动程序不需要保护自己的read()、write()和fsync()函数,但必须使用自己的open()、release()和ioctl()函数,函数原型为:
static int my_open(struct inode *inode,struct file *file);
static int my_release(struct inode *inode,struct file *file);
static int my_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long age);
    块设备驱动程序的请求处理函数一般通

























标签:ARM,uCLinux系统,程序,内核,嵌入式设备,
版权声明:版权归中国控制工程网所有,转载请注明出处!