Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1391025
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类:

2006-06-13 17:42:30

这篇文章介绍如何在一块DOC(Disk On Chip)上创建一个嵌入式的Linux,如果你用的是DOM或者CF卡的话,这篇对你用处就不是很大。

系统需求:
 一块带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参数看看.

PS:我就曾因为没有加linear参数导致LI错误而折腾了一个通宵,ft 10000times
阅读(1917) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~