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
相关文档:
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 ......
解压几种文件格式
wzwz.tar.gz——tar zxvf wzwz.tar.gz
wzwz.tar.bz2——tar jxvf wzwz.tar.bz2
wzwz.rpm——rpm -ivh wzwz.rpm
cpio——cpio -idm < wzwz.img
生成initrd.img
dd if=/dev/zero of=/home/wzwz.img bs=1M count=10
mke2fs -F -v wzwz.i ......
昨天在编写一个程序的时候发现需要链接的静态库都确定存在,指定的路径也没有问题,但是编译总是出现链接问题,找不到实现,才发现原来如果同时链接多个静态库,并且如果这些静态库之间存在相互依赖关系的话,需要按一定的顺序进行链接,例如:如果libb.a依赖liba.a,那么编译参数应该写成这样: -lb -la ......
1.Vi及其运行模式
Vi是“Visual interface”的简称。可以执行输出、删除、查找、替换、块操作等众多文本操作
练习
cp /etc/passwd /tmp/ 拷贝一个文件
连续按dd 可以删除一行
连续按oo 可以插入一行
按一个O 可以在光标上面插入一行
2.重定向
标准输入、输出
......