Linux启动过程中硬件模块的加载
前言:我觉得我的文章相对来说都是比较浅显的。一些初学者可以看看,对于高手来说,如果你们不吝啬时间的话,希望也能帮我看看,指点一下其中的错误。这也是我到这里来和大家交流的目的。
阅读Linux内核启动代码的直接动力是我想编写RTL8019AS的网卡驱动程序(2.4.18内核只支持了CS8900A)。既然要写驱动,我就想知道它是怎么样被加载的,好奇心驱使我先去搞定这个问题。
拿到2.4.18的软件包,一万多个文件,我不知怎么下手。所幸手头有这么三件工具助我入门:
1,一块移植好linux的开发板,通过它可以看到linux启动过程打印的消息。
2, google,网上关于linux的资料真是太多了!!!
3, Windows文件搜索引擎,通过它可以知道在那些文件中打印出那些消息。
很快,我就找到了linux启动的总的入口,/arch/arm/boot/compressed/head.s。
head.s完成的工作主要是底层寄存器、MMU的一些设定以及kernel的解压缩。汇编文件中调用的C代码大多位于该目录下misc.c文件,比如decompress_kernel。
当然,这部分不是重点,head执行完毕以后就跳到start_kernel(),这才是我们的重点所在,这个函数位于文件/init/main.c中。这个文件是启动的主线!!!
在start_kernel中,依次执行各个初始话函数,这里具体我没有看,一直到最后rest_init(),在这个函数里启动了一个init线程,而主线程自己则进入了IDLE状态。所以我们关心一下init线程做了什么事情,看文件最后init函数。
在这个函数里面,先lock_kernel,然后调用do_basic_setup,在这个函数里面又是一堆的初始化,有一个函数要引起我们的注意:do_initcalls。看看它干了什么:(这之后的东西在下文文件系统中讲解)
static void __init do_initcalls(void)
{
initcall_t *call;
call = &__initcall_start;
do {
(*call)( );
&nb
相关文档:
=============安装和登陆命令========================================
Mount:挂载命令。把存储介质指定成系统中的某个目录,比如挂载光驱mount /dev/cdrom把CDROM挂载,可在目录/mnt/cdrom下查看内容。同样可以挂载盘符,比如mount -t vfat /dev/uba1 /mnt,就可以切换到/mnt目录下查看内容。
umount:卸载命令,比如u ......
Red Hat Enterprise linux 5配置VPN服务器端新手上路
1.准备动作,使用下面的命令下载需要的安装文件。(默认的存放位置应该是/home
/admin)
wget http://poptop.sourceforge.net/yum/stable/packages/dkms-2.0.17.5-1.noarch.rpm
wget
http://poptop.sourceforge.net/yum/stable/packages/kernel_ppp_mppe-1.0.2-3dk ......
linux命令行下用Fetion飞信发送免费短信
一、最新版本2009
通过linux命令行来发送短信的方法,觉得甚是好用,适用运维监控。这里向大家推荐的是飞信机器人的软件,支持linux、命令行下的飞信、完全免费(目前为止); 官网地址: http://www.it-adv.net/
环境 debian lenny
下载最新linux版本客户端 http://bbs.it-ad ......