因为我用的板子和杭州立宇泰公司的44B0-C开发板差不多,在自己修改始终无法让uClinux运行起来的情况下,想到看看他们的补丁在Board Level都做了哪些修改,于是下载了
uClinux-20040408-ARMSYS。解压后用EditPlus打开发现修改的地方与我前面看得那篇Porting uClinux HOWTO提到的大体差不多。这个patch同时还支持S3C4510处理器,而我只关心S3C44B0X相关的部分,所以很多东西改不改对我来说无所谓。我先从EditPlus观察这个patch修改/创建了哪些文件,然后用CompareIt把修改后的文件和原始文件(linux-2.4.24 kernel + uClinux-2.4.24-uc0 patch)进行对照,觉得可能对uClinux启动影响较大的新的改动有两个地方:
1、修改了默认的Kernel command line,增加了一个init=/linuxrc选项
2、在arch/armnommu/mm/init.c修改了一个函数,增加了对machine_is_s3c44b0x的检查
虽然不太明白为什么要做这些修改,我还是决定先编译一次看行不行。编译用户程序的时候还加上了BusyBox的部分,之前一直都没有加这个。结果是,虽然看起来还是有些问题,但终于进到Shell了!启动信息如下:
Linux version 2.4.24-uc0 (chaofu@ubuntu) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #2 2008年 01月 08日 星期二 21:40:42 CST
Processor: Samsung S3C44B0X revision 0
Architecture: S3C44B0X
On node 0 totalpages: 2048
zone(0): 0 pages.
zone(1): 2048 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/rom0 init=/linuxrc
Calibrating delay loop... 23.85 BogoMIPS
Memory: 8MB = 8MB total
Memory: 5668KB available (2198K code, 157K data, 36K init)
Dentry cache hash table entries: 1024 (order: 1, 8192 bytes)
Inode cache hash table entries: 512 (order: 0, 4096 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 2048 (order: 1, 8192 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Starting kswapd
ttyS0 at I/O 0x1d00000 (irq = 3) is a S3C44B0
ttyS1 at I/O 0x1d04000 (irq = 2) is a S3C44B0
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 1 disk images:
0: C09C208-C236A07 [VIRTUAL C09C208-C236A07] (RO)
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
VFS: Mounted root (romfs filesystem) readonly.
Freeing init memory: 36K
Private writable mappings not supported
Private writable mappings not supported
Private writable mappings not supported
Sash command shell (version 1.1.1)
/>
这些新修改的部分还需要再去查资料,搞清楚为什么需要这些修改。但是因为之前的编译为了缩短时间和减少最终映像文件的大小,应用程序选的很少,连mount也省略了……而这次以BusyBox的方式添加了mount命令。这样来看,还不能肯定这些修改是不是必须的 -_____- 。总之,还是应该弄清楚一个平台的移植(Board Level),板级设备(Flash/RAM/UART/ETHER ...)的初始化、中断分配、驱动程序等等,如果要添加新设备也能够自己搞定。不过,uc0对S3C44B0X处理器的支持,是否也是为某个平台量身定做的呢?毕竟,那么多的修改也可以说明这些移植代码并不是完全平台无关的吧?