分类:
2006-06-13 17:42:30
系统需求:
一块带DOC支持的开发板(最好带floppy支持);
一块DOC;
一张98/dos启动软盘;
一张带有DOC工具的软盘,工具可从m-system网站()下载;
Linux2。4内核;
一个装有Linux的硬盘;
Ok,现在我们可以开始了:
1. 从网上去获取最新的MTD/DOC/JFFS源代码:
a) 以root登陆;
b) cd /usr/src
c) cvs –d :pserver:
anoncvs@cvs.infradead.org:/home/cvs login
(密码为anoncvs)
d) cvs –d :pserver:
anoncvs@cvs.infradead.org:/home/cvs co mtd
上面的命令从服务器上获取最新的mtd代码,在/usr/src目录下建立一个mtd目录;
2. 将新的补丁打在自己的源代码上:
cd /usr/src/mtd/patches
sh patchin.sh /usr/src/linux
这步在内核源代码和刚刚download下来的mtd代码间建立符号链接。
现在,你已经有了具有最新的mtd支持的内核源代码了,下面就要重新编译内核;
3. 重新编译内核,增加内核的MTD支持。
你需要将下面几项编译进内核中:
* Memory Technology Device(MTD) support
* Direct char device access to MTD device
* Caching block device access to MTD device
* Readonly block device access to MTD device
* NFTL(NAND Flash Translation Layer) support
* Write support for NFTL(BETA)
Self-contained MTD device drivers-->
这下面的根据你的DOC的型号选择(1000,2000,or Millennium)
Nand Flash Device Driver-->
* NAND Device Support
* Enable ECC correction algorithm
Ok,上面就是MTD/DOC所需要的内核支持,重新编译:
make dep;make clean;make bzImage
4. 使用新内核启动,识别出DOC:
如何使用新内核和如何修改lilo这里就不提了,可以参考lilo-howto。
使用新内核启动之后,检查是否已经识别除了DOC,应该有类似下面的输出:
[root@STB dev]# cat /proc/mtd
dev: size erasesize name
mtd0: 02000000 00004000 "DiskOnChip 2000"
这表示系统已经识别了你的DOC,下面就可以使用了;
5. 重新启动系统,插入98启动软盘,启动dos环境;
6. 取出98启动盘,插入DOC工具盘:
dformat /win:d000 /S:doc512.exb
这个命令将擦写DOC的firmware;
7. 重新启动系统,进入Linux环境,在DOC上建立ext2文件系统:
8. 使用98启动盘启动系统,插入DOC工具盘:
dformat /win:d000 /S:doc512.exb /first /noformat
OK!祝贺你,现在你已经得到了一个可以启动的DOC了。关机,拔掉你的硬盘,软盘,然后试试DOC的启动,怎么样,感觉不错吧!
我的测试环境:
硬件:一块我们公司定制的板子,一块外面随便买的工控板子,用这种方法都成功搞定。
软件:Redhat 7。2(kernel 2。4。7-10)
hints:
1. 如果别处编译的内核不能启动,系统提示“Cannot mount root device”时,可能是你的内核没有被制定启动哪个设备,用rdev来指定一个启动设备就OK了:
rdev bzImage /dev/hda1
2. 如果你的内核识别了DOC,在/proc/mtd中也有正确的输出,但系统中却没有nftla和mtd设备文件,你可以手工建立这些设备文件:
方法一:使用dev目录下的MAKEDEV程序建立:
cd /dev
./MAKEDEV nftla
./MAKEDEV mtd
方法二:使用mknod命令手工建立(当然,这种手工建立的方式需要设备的主设备号,如果你不确定的话还是用MAKEDEV程序吧):
mknod /dev/nftla1 b 93 0
mknod /dev/mtd0 c 90 0
3.
如果你的lilo提示说不支持DOC设备的话,用从cvs得到的lilo-mtd程序,它在mtd/patches目录下,包名叫lilo-
mtd.tar.gz(这个名字可能改变,但总会有lilo字样的,呵呵)。解开这个文件,得到一个程序lilo-mtd和一个文件boot.b-
mtd,使用这个boot.b-mtd取代lilo.conf文件中的boot.b:
install=/boot/boot.b
把上面这行的boot.b换为得到的boot.b-mtd,你的问题就ok了。
4.
DOC在用dformat的first选项之后,就是IDE设备中第一个启动的,使得有DOC的板子上的硬盘就没法启动,让我们的调试工作很不方便,要每
次把DOC固件插掉在启动硬盘,有一个方法可以在启动时屏蔽掉DOC,让硬盘启动:在进入BIOS之后,摁住ctrl+alt+b,就能屏蔽DOC启动
了,试试看,怎么样!
5. 有时候用lilo写的bootloader运行时出现LI就挂了,这可能是物理参数不匹配或者改变了map但没有重新运行lilo造成的,可以重新运行lilo或者试试加个linear参数看看.