基于嵌入式uCLinux内核启动过程分析与设计
[11-20 15:52:46] 来源:http://www.88dzw.com arm嵌入式 阅读:8373次
文章摘要:值得再次注意的是,在内核启动过程中,调用了在文件hardware.h中定义的与硬件有关的信息。基于Linux的嵌入式系统的启动是严重依赖于硬件平台的,在内核启动引导前,必须根据硬件平台和系统功能,修改必要的文件[2]。本系统中就修改了hardware.h中的flash、SDRAM的控制寄存器ROMCON0、DRAMCON0和SYSCFG等。uCLinux启动时,运行一个叫做init的程序,它是由操作系统启动的用户级进程,由它来启动后面的任务,包括多用户环境、网络等。init进程的行为是在函数simpleinit.c中定义的,所以可根据系统的功能定制init进程的行为,如在本系统中加入了串口控制
基于嵌入式uCLinux内核启动过程分析与设计,标签:arm嵌入式系统,arm系统,http://www.88dzw.com值得再次注意的是,在内核启动过程中,调用了在文件hardware.h中定义的与硬件有关的信息。基于Linux的嵌入式系统的启动是严重依赖于硬件平台的,在内核启动引导前,必须根据硬件平台和系统功能,修改必要的文件[2]。本系统中就修改了hardware.h中的flash、SDRAM的控制寄存器ROMCON0、DRAMCON0和SYSCFG等。
uCLinux启动时,运行一个叫做init的程序,它是由操作系统启动的用户级进程,由它来启动后面的任务,包括多用户环境、网络等。init进程的行为是在函数simpleinit.c中定义的,所以可根据系统的功能定制init进程的行为,如在本系统中加入了串口控制程序,还可以利用printk函数打印出必要的调试信息。当init进程启动时,它读取一个运行控制文件rc和一个配置文件inittab。在嵌入式应用中,一般需要在操作系统运行起来后立刻运行用户的特定程序,为此可考虑修改这两个文件。本系统中就是恰当地修改了inittab文件和rc文件,以使系统启动后即运行一些特定进程。在程序inittab.c中修改inittab文件,然后通过向init进程发送SIGHUP信号,即kill(1,SIGHUP),使init进程重新读取配置文件inittab[3]。
inittab.c文件中的部分代码如下:
FILE *pFile;
if((pFile=fopen("/etc/inittab","w"))!=NULL){
fprintf(pFile,"pollmeter:unknown:/bin/pollmeter\r\n");
fprintf(pFile,"netcomm:unknown:/bin/netcomm\r\n");
……
}
......
kill(1,SIGHUP); //init进程的ID等于1
……
在启动过程中还有一个重要的链接脚本文件,在该文件中指明了内核的入口地址。
总之,uCLinux的启动过程也较复杂,其中要调用许多文件,要能正确的启动uCLinux操作系统,就必须根据硬件平台和系统功能,修改相关的源代码文件。
3 结束语
本文分析了内核的启动引导过程,并根据应用系统的特点修改了启动代码以及必要的相关文件,完成了uCLinux内核的正确引导。实际应用表明,本系统的启动设计正确可靠。本文的分析设计方法对嵌入式Linux的开发有很大的借鉴价值,相信Linux在嵌入式系统中的应用一定会越来越广。
- 上一篇:关于Linux VI命令使用技巧
《基于嵌入式uCLinux内核启动过程分析与设计》相关文章
- › 基于嵌入式Linux的TFT LCD IP及驱动的设计
- › 基于嵌入式网络的无线传感器网络平台软硬件实现
- › 基于嵌入式系统的GPRS系统的设计
- › 基于嵌入式系统的USB(HID)设备
- › 基于嵌入式操作系统的磁场测量系统的设计
- › 基于嵌入式环境中Nucleus到Linux的程序移植方案
- 在百度中搜索相关文章:基于嵌入式uCLinux内核启动过程分析与设计
- 在谷歌中搜索相关文章:基于嵌入式uCLinux内核启动过程分析与设计
- 在soso中搜索相关文章:基于嵌入式uCLinux内核启动过程分析与设计
- 在搜狗中搜索相关文章:基于嵌入式uCLinux内核启动过程分析与设计