RTL8139 的接收路径设计成一个环形缓冲区(一段线性的内存,映射成一个环形内存)。当设备接收到数据时,数据的内容就保存在这个环形缓冲区内并更新下个存储数据的地址(第一个数据包的开始地址+第一个数据包的长度)。设备会一直保留缓冲区内的数据直到整个缓冲区耗尽。这样,设备会再次重写缓冲区内起始位置的内容,就像一个环那样。
D23Linux联盟D23Linux联盟 从 2.2 版内核升级到 2.4 版时, RTL-8139 支持模块已不再叫 rtl8139,而叫它 8139too,现在你再看到8139too就不会不明白它的来由了吧。
D23Linux联盟D23Linux联盟| SCSI subsystem driver Revision: 1.00 |
D23Linux联盟 USB设备信息,USB会被当做SCSI来处理。
D23Linux联盟D23Linux联盟| mumk_register_tasklet: (1) tasklet 0x905bf9c0 status @0x9025e974 |
D23Linux联盟 软中断信息输出。Tasklet是在2.4中才出现,它是为了更好地利用多CPU。
D23Linux联盟D23Linux联盟D23Linux联盟 探测 XX的闪存(Flash Memory),"NOR NAND Flash Memory Technology"
D23Linux联盟D23Linux联盟| Amd/Fujitsu Extended Query Table v1.3 at 0x0040number of CFI chips: 1 |
D23Linux联盟 AMD与富士通合资设立的Flash供货商Spansion。AMD因获利不佳,已经退出Flash市场,后续由Spansion合资公司经营.主要生产NOR类型的flash,特点是容量小,速度快。Spansion商标的flash,在我们开发中会经常看到。以后大家看到Spansion的芯片,就能了解到它和AMD还有富士通的来龙去脉了。
D23Linux联盟D23Linux联盟 Common flash Interface (CFI)是指一个统一的flash访问接口,表示这种flash是这种接口类型的。
D23Linux联盟D23Linux联盟| Using buffer write method |
D23Linux联盟 使用flash写缓冲方式
D23Linux联盟D23Linux联盟 flash提供了写BUFFER的命令来加快对flash上块的操作。对Flash擦除和写数据是很慢的。如果用写BUFFER的命令会快一点。据手册上说,会快20倍。Buffer Size :5 bytes的buffer缓冲不是每个块都有,是整个flash只有一个5 bytes的buffer,用写BUFFER命令对所有的块进行写操作,都要用同一个buffer,写Buffer是主要检查buffer是否available,其实buffer起缓冲作用,来提高工作效率。
D23Linux联盟D23Linux联盟 比如某flash有128个128K字节块。允许用户对任意块进行字节编程和写缓冲器字节编程操作,每字节编程时间为210μs;若采用写缓冲器字节编程方式,32字节编程共需218μs,每字节编程时间仅为6.8μs。芯片的块擦除时间为1s,允许在编程或块擦除操作的同时进行悬挂中断去进行读操作,待读操作完成后,写入悬挂恢复命令,再继续编程或块擦除。 Creating 3 MTD partitions on "XX mapped flash":0x00000000-0x00020000 : "BootLoader"0x00020000-0x00040000 : "Config"0x00040000-0x01000000 : "Romfs"
D23Linux联盟D23Linux联盟 此处为重要信息部分,需要特别留意。
D23Linux联盟D23Linux联盟 在内存中映射过的flash,创建三个MTD分区:
D23Linux联盟D23Linux联盟 flash上的内容将被映射到内存中的对应地址
D23Linux联盟D23Linux联盟 前128K为BootLoader--->0x00000000-0x00020000
D23Linux联盟D23Linux联盟 接着的128K为系统配置信息Config存放的位置--->0x00020000-0x00040000
D23Linux联盟D23Linux联盟 再后面的 16M - 2X128K 为romfs的存放处.--->0x00040000-0x01000000
D23Linux联盟D23Linux联盟 上面的内容,大家可以根据前面的换算公式得到。
D23Linux联盟D23Linux联盟 A> 编译的bootloader一般大小约50K左右;
D23Linux联盟D23Linux联盟 B> 在此处就知道了配置信息config是放在第2分区中的;
D23Linux联盟D23Linux联盟 C> 制作的romfs的大小,一般为8M或10M左右,所以能放得下;
D23Linux联盟D23Linux联盟 嵌入式Linux内核的块设备驱动:
D23Linux联盟D23Linux联盟 对于linux 的根文件系统,目前有三种块设备的驱动可以选择,它们分别是:
D23Linux联盟D23Linux联盟 a) Blkmem 驱动
D23Linux联盟D23Linux联盟 b) MTD 驱动
D23Linux联盟D23Linux联盟 c) RAM disk 驱动
D23Linux联盟D23Linux联盟 Blkmem 驱动是专门为嵌入式linux 开发的一种块设备驱动,它是嵌入式linux系统中最为古老和通用的块设备驱动。它原理相对简单但是配置比较复杂,需要根据你即的Flash的分区使用情况来修改代码。当然修改的结果是它可以对一些NOR型的Flash进行读写操作。不过目前支持的Flash类型不够多。如果新加入对一种Flash的支持需要作的工作量比较大。
D23Linux联盟D23Linux联盟 Linux的MTD驱动是标准Linux的Flash驱动。它支持大量的设备,有足够的功能来定义Flash的分区,进行地址映射等等。使用MTD你可以在一个系统中使用不同类型的Flash。它可以将不同的Flash组合成一个线性的地址让你来使用。
D23Linux联盟D23Linux联盟 在标准的Linux 2.4内核中MTD有一系列的选项,你可以根据个人系统的需要来选择,定制。