buf

BE something YOU love and understand
posts - 94, comments - 35, trackbacks - 0, articles - 2
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

在我的S3C44B0开发板跑uCLinux - 目前的进展

Posted on 2008-01-01 21:41 buf 阅读(1781) 评论(0)  编辑 收藏 引用 所属分类: Embedded
革命尚未成功,不过好歹终于从串口看到输出了,不容易哦,对像我这样的菜鸟来说。

基本上是按照uCLinux Porting HOWTO(这篇文章不错的,我觉得对新手会有些帮助,推荐一下)一步一步的做,在MBA44板的基础上修改,“成果”如下:

  • 感觉改动最大的地方就是根文件系统的安排(这一块也是最让我摸不着头脑的地方)
首先通过make romfs生成要使用的根文件系统的文件、目录结构,然后使用genromfs工具按照romfs的规则生成romfs.img文件,这个img文件通过arm-elf-ld处理得到romfs.o文件,最后修改vmlinux-armv.lds.in把romfs.o放置在.text段的后部,即将根文件系统编译到kernel中。

  • 对整个配置、编译过程有了大致了解(Makefile的分析)
1, 清除前一次的配置和编译生成的中间、最终文件
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- mrproper
2, 使用菜单方式配置
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- menuconfig
3, 建立依赖关系
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- dep
4, 编译库(系统和用户程序的运行需要这些库)
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- lib_only
5, 编译用户程序
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- user_only
6, 生成要使用的根文件系统的文件、目录结构
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- romfs
7, 生成根文件系统(romfs.o)
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- image
8, 生成最终要下载到SDRAM中的二进制文件(需要romfs.o)
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- linux
9, 对上面生成的二进制文件做一些处理(去掉一些不必要的section,减小文件大小)
$ make ARCH=armnommu CROSS_COMPILE=arm-elf- images

  • 启动信息如下:
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/)) #4 2008年 01月 01日 星期二 19:20:16 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
Calibrating delay loop... 119.60 BogoMIPS
Memory: 8MB = 8MB total
Memory: 6660KB available (1186K code, 201K data, 40K 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
Samsung S3C44B0X UART driver version 0.1 <thomas.eschenbacher@sympat.de>
ttyS0 (irq = 3) is a builtin Samsung S3C44B0X UART
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 1 disk images:
0: C0D90F8-C13A8F7 [VIRTUAL C0D90F8-C13A8F7] (RO)
RAMDISK driver initialized: 16 RAM disks of 2048K size 1024 blocksize
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 512 bind 512)
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
cramfs: wrong magic
VFS: Mounted root (romfs filesystem) readonly.
Freeing init memory: 40K
Allocation of length 84936 from process 7 failed
Buffer memory:       52kB
Cache memory:       40kB
Free pages:        6204kB (     0kB HighMem)
Zone:DMA freepages:     0kB
Zone:Normal freepages:  6204kB
Zone:HighMem freepages:     0kB
( Active: 13, inactive: 10, free: 1551 )
= 0kB)
1*4kB 1*8kB 1*16kB 1*32kB 96*64kB = 6204kB)
= 0kB)
Unable to allocate RAM for process text/data, errno 12
init: exec rc failed
init: Booting to single user mode
Allocation of length 84906 from process 8 failed
Buffer memory:       52kB
Cache memory:       40kB
Free pages:        6204kB (     0kB HighMem)
Zone:DMA freepages:     0kB
Zone:Normal freepages:  6204kB
Zone:HighMem freepages:     0kB
( Active: 14, inactive: 9, free: 1551 )
= 0kB)
1*4kB 1*8kB 1*16kB 1*32kB 96*64kB = 6204kB)
= 0kB)
Unable to allocate RAM for process text/data, errno 12
init: exec of single user shell failed
Allocation of length 84939 from process 9 failed
Buffer memory:       52kB
Cache memory:       44kB
Free pages:        6196kB (     0kB HighMem)
Zone:DMA freepages:     0kB
Zone:Normal freepages:  6196kB
Zone:HighMem freepages:     0kB
( Active: 14, inactive: 10, free: 1549 )
= 0kB)
1*4kB 0*8kB 1*16kB 1*32kB 96*64kB = 6196kB)
= 0kB)
Unable to allocate RAM for process text/data, errno 12
init: /bin/sh exeAllocation of length 84939 from process 10 failed
Buffer memory:       52kB
Cache memory:       44kB
Free pages:        6196kB (     0kB HighMem)
Zone:DMA freepages:     0kB
Zone:Normal freepages:  6196kB
Zone:HighMem freepages:     0kB
( Active: 14, inactive: 10, free: 1549 )
= 0kB)
1*4kB 0*8kB 1*16kB 1*32kB 96*64kB = 6196kB)
= 0kB)
Unable to allocate RAM for process text/data, errno 12
init: /bin/sh exe
然后就貌似挂掉了。。。。

接下来要作的事情:
  • 把那篇HOWTO从头到尾细细读一遍,也许会有新的收获
  • 关于uCLinux的剪裁配置,搞清楚构建一个基本系统必不可少的东西
  • uCLinux的启动——从第一条汇编语句到等待用户输入——这个过程,重点在start_kernel中完成的一系列动作

同志任需努力。。。
只有注册用户登录后才能发表评论。