<?xml version="1.0" encoding="gb2312"?><rss version="2.0"><channel><title>linux菜园</title><link></link><description></description><language>zh-cn</language><generator>Goodspeed Rss</generator><ttl>3</ttl><pubDate>Mon, 06 Jul 2009 12:42:10 GMT</pubDate><category></category><copyright></copyright><docs></docs><item><title>推荐不错的linux设备驱动教程</title><pubDate>Tue, 01 May 2007 16:22:59 GMT</pubDate><link>http://blog.ednchina.com/blog/levension/24637/message.aspx</link><description>&lt;p&gt;linux设备驱动教程(天极网)&lt;/p&gt;
&lt;p&gt;linux设备驱动程序设计入门:http://soft.yesky.com/lesson/1/2648001.shtml&lt;/p&gt;
&lt;p&gt;为系统处理器编写Linux设备驱动程序:http://os.yesky.com/lin/361/2608361.shtml&lt;/p&gt;
&lt;div align="left"&gt;&lt;font color="#ffffff"&gt;&lt;strong&gt;lux设备驱动程序设计入门&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div class="adright"&gt;&lt;span id="ad2"&gt;
&lt;div align="left"&gt;&lt;font color="#ffffff"&gt;&lt;strong&gt;
&lt;div align="left"&gt;&lt;font color="#ffffff"&gt;&lt;strong&gt;l&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;</description><comments></comments><guid>http://blog.ednchina.com/blog/levension/24637/message.aspx</guid><category>linux菜园 软件开发</category><author></author></item><item><title>LINUX引导过程</title><pubDate>Thu, 08 Mar 2007 22:04:28 GMT</pubDate><link>http://blog.ednchina.com/blog/levension/17665/message.aspx</link><description>LINUX引导过程&lt;br&gt;&lt;br&gt;LINUX引导过程&amp;nbsp;&lt;br&gt;首先说明一下，这里讲的是LINUX引导经过的步骤，而不涉及KERNEL引导过程的内部&amp;nbsp;细节。&lt;br&gt;&lt;br&gt;一、从BIOS到KERNEL&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;计算机在接通电源之后首先由BIOS进行自检，即进行所谓的POST（Power&amp;nbsp;On&amp;nbsp;Self&amp;nbsp;Test），然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。&amp;nbsp;如通常BIOS中设的引导顺序为C在最前面，那么就把C盘（第一个IDE硬盘）的第0柱面，第0头的第1个扇区读入内存，然后跳到那里开始执行。这个扇区有一个大家熟悉的名字--MBR（Main&amp;nbsp;Boot&amp;nbsp;Record）。换句话说，MBR里面存放的是一小段程序以及分&amp;nbsp;区表的数据。在使用WIN9X和DOS时，这里面放的代码就把分区表里标记为Active的分区的第一个扇区（一般存放着操作系统的引导代码）读入内存并跳转到那里开始执行。&amp;nbsp;&lt;br&gt;&lt;br&gt;而在用LILO引导LINUX时，有两种选择：&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(1)&amp;nbsp;把LILO安装在MBR。这时就由BIOS直接把LILO代码调入内存，然后跳转执行LILO。即&amp;nbsp;BIOS--&amp;gt;LILO（在MBR中）--&amp;gt;KERNEL&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(2)&amp;nbsp;把LILO安装在LINUX分区，并把LINUX分区设为Active。这时，BIOS调入的是WIN9X/DOS下的MBR代码，然后由这段代码来调入LILO的代码（位于活动分区的第一个扇区）。即&amp;nbsp;&amp;nbsp;BIOS--&amp;gt;MBR--&amp;gt;LILO（在活动分区的第一个扇区）--&amp;gt;KERNEL&amp;nbsp;&lt;br&gt;因为在读入及执行MBR时，操作系统还没有起来，所以只能用BIOS提供的INT13来进&amp;nbsp;行磁盘操作，而INT13只能读写硬盘1024柱面之前的数据，由此可知任何操作系统的引&amp;nbsp;导代码必须在1024柱面之前。对于LINUX来说，不管你使用方式(1)还是方式(2)启动，都要保证KERNEL放在1024柱面之前。只有在KERNEL起来以后，才有读/写1024柱面以后数据的能力。因为LINUX不使用INT13来进行硬盘操作。作为操作系统要能被正确引导，在现有&amp;nbsp;的BIOS下，它们的引导部分都必须在1024柱面之前。如果操作系统本身还是基于INT13&amp;nbsp;来进行磁盘操作的话，那么它也只能读/写1024柱面之前的数据。&lt;br&gt;&lt;br&gt;二、从KERNEL到login&amp;nbsp;prompt&amp;nbsp;&lt;br&gt;在KERNEL起来之后，将生成第一个进程--init，实际上是执行了/sbin/init。Init的工作是根据/etc/inittab来执行相应的脚本进行系统初始化，如设置键盘、字体，装载模块，设置网络，等等。&amp;nbsp;&lt;br&gt;&lt;br&gt;/etc/inittab文件的每一行包括四个域：&amp;nbsp;&lt;br&gt;id:runlevels:action&lt;img hspace="2" src="http://www.blogcn.com/images/tongue.gif" vspace="2" border="0"&gt;rocess&amp;nbsp;&lt;br&gt;runlevel是运行模式，通常为0-6。模式0是halt，模式6是reboot，模式1是单用户，&amp;nbsp;模式2/3是多用户，模式5是运行xdm以图形界面方式登录。id为标识符，通常为两个&amp;nbsp;字母。process为需要执行的程序或脚本。action包括有:&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(1)&amp;nbsp;defaultinit&amp;nbsp;--&amp;nbsp;指定缺省的运行模式（runlevel）&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(2)&amp;nbsp;sysinit&amp;nbsp;--&amp;nbsp;指定运行的第一个程序/脚本，此时runlevels域不起作用。&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(3)&amp;nbsp;boot&amp;nbsp;--&amp;nbsp;在sysinit之后执行，runlevels域不起作用&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(4)&amp;nbsp;bootwait&amp;nbsp;--&amp;nbsp;同boot，但init会等待该命令结束&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(5)&amp;nbsp;once&amp;nbsp;--&amp;nbsp;在进入有runlevels指定的运行模式时运行&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(6)&amp;nbsp;wait&amp;nbsp;--&amp;nbsp;同上，但init会等待该命令结束&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(7)&amp;nbsp;respawn&amp;nbsp;--&amp;nbsp;在进入相应runlevel时执行，并且若该进程结束，init会再起&amp;nbsp;一个进程执行同样的命令&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;(8)&amp;nbsp;ctrlaltdel&amp;nbsp;--&amp;nbsp;指定在用户按下Ctrl-Alt-Del时执行的命令&amp;nbsp;&lt;br&gt;&lt;br&gt;对于Redhat来说，执行的顺序为：&amp;nbsp;&lt;br&gt;/etc/rc.d/rc.sysinit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;由init执行的第一个脚本&amp;nbsp;&lt;br&gt;/etc/rc.d/rc&amp;nbsp;＄RUNLEVEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;＄RUNLEVEL为缺省的运行模式&amp;nbsp;&lt;br&gt;/sbin/mingetty&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;等待用户登录&amp;nbsp;&lt;br&gt;&lt;br&gt;三、/etc/rc.d/rc.sysinit及/etc/rc.d/rc&amp;nbsp;&lt;br&gt;在Redhat中，/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作，包括：&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;调入keymap以及系统字体&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;启动swapping&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;设置主机名&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;设置NIS域名&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;检查（fsck）并mount文件系统&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;打开quota&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;装载声卡模块&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;设置系统时钟&amp;nbsp;&lt;br&gt;等等。&amp;nbsp;&lt;br&gt;&lt;br&gt;/etc/rc.d/rc则根据其参数指定的运行模式来执行相应目录下的脚本。凡是以Kxx开头的，都以stop为参数来调用；凡是以Sxx开头的，都以start为参数来调用。调用的顺序按xx从小到大来执行。例如，假设缺省的运行模式是3，/etc/rc.d/rc就会按上述方式调用/etc/rc.d/rc3.d/下的脚本。&amp;nbsp;&lt;br&gt;值得一提的是，Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个，所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后，登录之前执行的命令。&amp;nbsp;&lt;br&gt;&lt;br&gt;四、init在等待/etc/rc.d/rc执行完毕之后（因为在/etc/inittab中/etc/rc.d/rc&amp;nbsp;的action是wait），将在指定的各个虚拟终端上运行/sbin/mingetty，等待用户的登录。至此，LINUX的启动结束。&amp;nbsp;&lt;br&gt;&lt;br&gt;五、对于Slackware，作为sysinit的脚本是/etc/rc.d/rc.S，运行模式1的脚本是&amp;nbsp;/etc/rc.d/rc.K，运行模式2、3、4、5的脚本是/etc/rc.d/rc.M。另外，装载模块的命令都集中在/etc/rc.d/rc.modules中，/etc/rc.d/rc.local为登录前执行的最后一个脚本。</description><comments></comments><guid>http://blog.ednchina.com/blog/levension/17665/message.aspx</guid><category>linux菜园 嵌入式</category><author></author></item><item><title>Linux内核2.6.19源代码目录树结构</title><pubDate>Sat, 03 Mar 2007 17:44:08 GMT</pubDate><link>http://blog.ednchina.com/blog/levension/17164/message.aspx</link><description>&lt;div class="title"&gt;
&lt;h1&gt;&lt;font size="2"&gt;Linux内核2.6.19源代码目录树结构&lt;/font&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;a class="black" href="javascript:fontZoom(12)"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&lt;/h2&gt;&lt;/div&gt;
&lt;div class="content" id="fontzoom"&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;
&lt;div&gt;&lt;font size="2"&gt;要深入的学习Linux的工作机制，就必须阅读其源代码。现已最新的2.6.19内核（可以在&lt;/font&gt;&lt;a href="http://www.kernel.org/"&gt;&lt;font color="#014982" size="2"&gt;&lt;u&gt;http://www.kernel.org&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;下载）为例，简单的介绍下Linux内核源代码目录树结构。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;arch：&lt;/strong&gt;包含和硬件体系结构相关的代码，每种平台占一个相应的目录。和32位PC相关的代码存放在i386目录下，其中比较重要的包括kernel（内核核心部分）、mm（内存管理）、math-emu（浮点单元仿真）、lib（硬件相关工具函数）、boot（引导程序）、pci（PCI总线）和power（CPU相关状态）。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;block：&lt;/strong&gt;部分块设备驱动程序。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;crypto：&lt;/strong&gt;常用加密和散列算法（如AES、SHA等），还有一些压缩和CRC校验算法。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;Documentation：&lt;/strong&gt;关于内核各部分的通用解释和注释。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;drivers：&lt;/strong&gt;设备驱动程序，每个不同的驱动占用一个子目录。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;fs：&lt;/strong&gt;各种支持的文件系统，如ext、fat、ntfs等。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;include：&lt;/strong&gt;头文件。其中，和系统相关的头文件被放置在linux子目录下。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;init：&lt;/strong&gt;内核初始化代码（&lt;font color="#ff0000"&gt;注意不是系统引导代码&lt;/font&gt;）。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;ipc：&lt;/strong&gt;进程间通信的代码。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;kernel：&lt;/strong&gt;内核的最核心部分，包括进程调度、定时器等，和平台相关的一部分代码放在arch/*/kernel目录下。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;lib：&lt;/strong&gt;库文件代码。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;mm：&lt;/strong&gt;内存管理代码，和平台相关的一部分代码放在arch/*/mm目录下。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;net：&lt;/strong&gt;网络相关代码，实现了各种常见的网络协议。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;scripts：&lt;/strong&gt;用于配置内核文件的脚本文件。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;security：&lt;/strong&gt;主要是一个SELinux的模块。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;sound：&lt;/strong&gt;常用音频设备的驱动程序等。&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;usr：&lt;/strong&gt;实现了一个cpio。&lt;br&gt;&amp;nbsp;&lt;br&gt;在i386体系下，系统引导将从arch/i386/kernel/head.s开始执行，并进而转移到init/main.c中的main()函数初始化内核。我个人认为可以按照这个顺序进行阅读（最好首先看完主要的数据结构定义等），对于各模块代码粗略看看就可以了，重点应该放在你所要研究的那个方向。要知道，一个人掌握全部Linux内核源代码是很困难的！&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;</description><comments></comments><guid>http://blog.ednchina.com/blog/levension/17164/message.aspx</guid><category>linux菜园 软件开发</category><author></author></item></channel></rss>