低固存嵌入式系统的uClinux小型化方法
uClinux的内核有两种可选的运行方式:Flash运行方式和 运行方式。Flash运行方式直接在Flash上运行,是很多嵌入式系统采用的方法。RAM运行方式运行速度可能更快(RAM 的存取速率要比Flash高),所需的内存也较少,同时这也是标准LinuX系统采用的启动方式。
不管采用哪种运行方式,没有文件系统的uClinux必须要实现内核与应用程序的一体化,一体化可以通过创建进程的方式来实现。创建进程可以采用内核函数do_fork()和do_execve(),也可以仍然用系统调用fork()和execve(),因为没有MMU的微控制器,内核的运行其实是与应用程序一样的。但在这里execve()是经过上面修改过的,去掉了其装载可执行文件的能力后,可采用直接跳转到可执行文件入口点的方法,运行应用程序。创建一个所有应用程序的跳转表:
struct App_table{
Int(*App_main)();//主程序
int(*LCD_window)();//A机操作界面管理程序
int(*AD)();//A/D采样程序
……}
然后在init()末尾添加如下代码:
if(fork()==0) execve(App_table->App_main);
else panic(No App_main found.);
3 新型文件系统(ReFS)开发
在某些嵌入式系统中要保存的文件大都是一条条操作记录或是系统警告提示信息,有固定的数据格式和长度,就好像数据库里的记录。而且针对这种简单文件系统的操作可能非常简单,所以借鉴EXT2和JFFS2等其它文件系统的设计开发了一种新的文件系统,文中将之命名为记录型文件系统(ReFS),其存储物理结构如图3所示。

数据块的大小是记录大小的n倍,是数据分配的最小单位,可以事先给不同用户分配不同的的空间,也可以限制用户使用的存储空间,然后动态地分配实际物理块。一个节点代表一个文件,文件是不同用户操作记录的一个集合,可由多个数据块构成。由于空间有限,可将整个空问构成一个循环链表,插入和删除的动作分别在表头和表尾进行。随着时间增长和记录条数的增加,整个存储空问会饱和,后面存进的记录会覆盖前面的记录,但数据在被覆盖前早巳失去应用价值,所以只需对链表进行插入、删除、查找等简单操作,就可以轻松实现对陵文件系统的管理。待整个文件系统的数据结构和操作函数完成后,把该文件系统加进uClinux中去。该步骤主要是构造超级块、节点、文件在内存中的结构,然后写出相应的超级块、节点、文件操作函数集super_operations,inode_operations,file_operations。再编写read_super函数和注册函数init_ReFS_fs,最后在Linux的初始例程filesystem_setup()函数中添加:
#ifdef CONFIG_ReFS_FS
init_ReFS_fs();
#endif
4 结束语
针对低固存嵌入式系统,可以通过以上的小型化措施,恨据具体的嵌入式应用定制uClinux,同时增加了系统的可移植性、易扩展性。但由于对原系统的某些功能作了裁剪、删除,在一定程度上影响了uClinux系统原有的可扩展性和移植性、不过这也是大小与移植性折中后的结果。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)linux相关文章:linux教程
评论