BusyBox v1.4.1 移植 s3c2410
init started: BusyBox v1.4.1 (2007-02-03 10:47:43 CST) multi-call binary
Starting pid 743, console /dev/console: '/etc/init.d/rcS'
Please press Enter to activate this console.
Starting pid 753, console /dev/console: '/bin/sh'
BusyBox v1.4.1 (2007-02-03 10:47:43 CST) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
-sh: can't access tty; job control turned off
Set search library path int /etc/profile
Set user path in /etc/profile
#
可恶的shell终于出来拉...
搞了两天,原来又犯老毛病--粗心...自从数据结构成绩出来后,心情一直都不好,那么简单的卷子分数竟然这么垃圾,还以为老师故意为难...直到前两天才发现,原来是自己粗心,做错三题,没什么好说的,只能怪自己。月满自亏,水满自溢,人满容易跌倒...人真奇怪,越是提醒,越是容易忘记。以此为训,不要在同一个地方跌倒多次!
哈哈,牢骚发完,该总结以下移植过程了:
1.制作 ramdisk 。本打算直接用NFS挂文件系统的,可惜网卡驱动还没完全ok... 该部分内容可以参考Linux系统移植 (十分感谢前辈的共享) 和 http://www.hhcn.com/cgi-bin/topic.cgi?forum=3&topic=816 。
#dd if=/dev/zero of=/dev/ram1 bs=1k count=8000
# losetup /dev/loop2 ramdisk
# mkfs.ext2 /dev/loop2
#mkdir ram
# mount -t ext2 /dev/loop2 ram
#cd ram
#mkdir bin dev etc lib mnt proc sbin sys tmp root usr
#mkdir mnt/etc
#mkdir usr/bin usr/lib usr/sbin
#mknod -m 660 dev/console c 5 1
#mknod -m 660 dev/null c 1 3
#touch linuxrc (至此,空ramdisk制作完毕)
当然,lib里面还要拷入一些库文件,为了方便,我将交叉编译的库全放进去。
#cp -rfd /usr/local/arm/3.4.1/arm-linux/lib/* ./ (注意-d,保持库文件的链接关系)
2.下载,当然是最新版的 BusyBox 1.4.1 (stable) 。解压,修改Makefile:
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-
接着便是make menuconfig 。如果不确定选哪些的话,可以用make depconfig 。值得注意的是 shell 的选择,在 Choose your default shell (none) 这一项回车后选择 ash , 否则,你会想我一样头疼大半天,make 后bin目录下就是没有sh ,而默认shell命令就是sh。错误提示如下:
Please press Enter to activate this console.
Starting pid 739, console /dev/console: '/bin/sh'
sh: applet not found
Process '-/bin/sh' (pid 739) exited. Scheduling it for restart.
关于Build Options 的 Build BusyBox as a static binary (no shared libs) 静态编译,我用3.4.1版的交叉编译怎么都不通过,提示 glibc 有问题:
applets/applets.c:20:2: #warning Static linking against glibc produces buggy executables
applets/applets.c:21:2: #warning (glibc does not cope well with ld --gc-sections).
applets/applets.c:22:2: #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets/applets.c:23:2: #warning Note that glibc is unsuitable for static linking anyway.
applets/applets.c:24:2: #warning If you still want to do it, remove -Wl,--gc-sections
applets/applets.c:25:2: #warning from top-level Makefile and remove this warning
2.95.3更加不行,唯有选用 Build shared lib busybox 。这样,就需要往 ram/lib 目录拷入相关的库文件。make , make install 后就出来 _install 目录,全拷到 ram 目录下。
#gzip -9c ramdisk > ramdisk.image.gz
到这里,基本的都已搞定,可以 reset 开发板看看。下面是常见的错误:
Failed to execute /linuxrc.
如果传给内核的参数 init=/linuxrc 没错的话,就要看看linuxrc文件是否正确,是否有权限运行。刚开始,由于没有选中 ash shell ,bin 目录下还没有 sh ,而我修改的 linuxrc 第一句的内容是 #!/bin/sh ,根本就不能解析。后来改为 #!/bin/ash ,能解析了,也高兴了一下,可惜提示 sh: applet not found 。选中默认的shell后问题解决。关于Linux的启动详细过程,可以参考 Linux 初始 RAM 磁盘(initrd)概述 、Linux Root Filesystem Primer 这两篇文章。Linux2.6 还引入了新的ram文件系统,配置起来相对简单,有机会尝试一下...
Warning: unable to open an initial console
新的ramdisk不行,我换回原来的ramdisk,发现可以跑,只是提示找不到终端。于是,对比我和其它网友的串口输出。发现我的Linux-2.6.19.2没有 Mounted devfs on /dev 这项。大段大段的搜索后发现,这个devfs已被提出内核,而替代者udev在嵌入式方面还没有一点资料...网上的资料全都说从fs/Kconfig添加:
onfig DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
可是,一点用处都没有...从Linux-2.6.18开始,包括文档在内已没有一点devfs的使用信息。而网上移植的Linux版本都比较低,所以...本想尝试从旧版本中移植相关代码过来(有点奇怪^_^),幸好当我对比新旧ramdisk时发现旧的ramdisk dev目录下缺少 console ,mknod 后可以进入旧版的 busybox 0.6 ...
最后是BusyBox的编译问题,使用3.4.1带的libc库编译,很容易出现与BusyBox里的程序不兼容现象。如:
modutils/lib.a(insmod.o)(.text.insmod_main+0x444): In function `insmod_main':
: undefined reference to `query_module'
miscutils/readahead.c: In function `readahead_main':
miscutils/taskset.c:17: error: parse error before '*' token
miscutils/taskset.c:18: warning: function declaration isn't a prototype
miscutils/taskset.c: In function `__from_cpuset':
......
最根本的解决办法是换一个libc库,可是现在还不知道哪个库最合适,唯有暂时将有问题的命令关掉...
两个星期过得真快,我的系统也终于跑起来,虽然还有很多问题,但总算有点收获 ^_^

评论
看了半天还是看不懂.收藏了慢慢研究
在将busybox编译为静态时候,如果选用uclibc库应该可以编译通过吧?
wtxymcjzd sfpxdmo fkoxmcgw aprdlw wqfor harnbxwm xgeda
geb62jjecth52f valign css valign css
选了ash,而且我把linuxrc开头也改成#!/bin/ash
我是想从NFS直接启动的,所以没有烧写文件系统到开发板里
是不是linuxrc的脚本写的有问题?
这是最后一步了,就是按回车就应该进入#的shell了.....谢谢了
你看看Choose your default shell (none)这项,是否为ash.另外,linuxrc里直接写#!/bin/sh就行了,会链接到默认shell的。
(2007-10-28 23:14:04)
init started: BusyBox v1.1.3 (2007.10.26-06:10+0000) multi-call binary
init started: BusyBox v1.1.3 (2007.10.26-06:10+0000) multi-call binary
Starting pid 28, console /dev/tts/0: '/etc/init.d/rcS'
Please press Enter to activate this console.
Starting pid 30, console /dev/tts/0: '/bin/sh'
sh: applet not found
这是为什么呢?按了回车应该进入console了呀,万分感谢
你busybox里没有选择默认的shell
(2007-10-28 15:49:58)
小弟最近 也在用 busybox 做文件系统 不过参照你的做法 还是出现
console:/dev/console
sh:applet not found
可以讲得具体一点吗
你默认的shell没选吧,我的文章红色字部分有点出的,请看的时候具体一点:)
(2007-07-26 12:26:42)
小弟用的也是和您一样的编译环境3.4.1
连安装地址都是一样的,哈哈——
/usr/local/arm/3.4.1/bin/arm-linux-
可是编译vivi时通不过
对了vivi应当只需要修改根目录下的makefile就可以了对吗?
需要指定linux2.6内核的头文件地址对吗,您要是有可编译通过的vivi源码可否给我一份 ,若是不行可否告知应当修改哪些东西?
vivi我没有用过,而且u-boot我只在2.95下编译通过...好像说过很多次了-_- -_- -_-
(2007-07-15 13:06:04)
请问我用的3.4.1的交叉工具链编译vivi却通不过不知道为什么,难道需要改变vivi的源代码吗
vivi我没有用过,而且u-boot我只在2.95下编译通过...好像说过很多次了-_-
(2007-07-14 21:49:11)
按楼主的方式,编译器3.4.1,链接的时候提示错误:
Archive member included because of file (symbol)
archival/lib.a(bbunzip.o) applets/built-in.o (bunzip2_main)
archival/lib.a(gzip.o) applets/built-in.o (gzip_main)
archival/lib.a(unzip.o) applets/built-in.o (unzip_main)
archival/libunarchive/lib.a(decompress_bunzip2.o)
applets/built-in.o (read_bunzip)
archival/libunarchive/lib.a(decompress_unzip.o)
archival/lib.a(unzip.o) (inflate_unzip)
archival/libunarchive/lib.a(find_list_entry.o)
archival/lib.a(unzip.o) (find_list_entry)
console-tools/lib.a(chvt.o) applets/built-in.o (chvt_main)
console-tools/lib.a(clear.o) applets/built-in.o (clear_main)
console-tools/lib.a(deallocvt.o)
applets/built-in.o (deallocvt_main)
console-tools/lib.a(dumpkmap.o)
applets/built-in.o (dumpkmap_main)
console-tools/lib.a(loadfont.o)
applets/built-in.o (loadfont_main)
console-tools/lib.a(loadkmap.o)
applets/built-in.o (loadkmap_main)
console-tools/lib.a(openvt.o)
applets/built-in.o (openvt_main)
console-tools/lib.a(reset.o) applets/built-in.o (reset_main)
console-tools/lib.a(resize.o)
applets/built-in.o (resize_main)
console-tools/lib.a(setconsole.o)
applets/built-in.o (setconsole_main)
console-tools/lib.a(setkeycodes.o)
applets/built-in.o (setkeycodes_main)
console-tools/lib.a(setlogcons.o)
applets/built-in.o (setlogcons_main)
coreutils/lib.a(basename.o) applets/built-in.o (basename_main)
coreutils/lib.a(cal.o) applets/built-in.o (cal_main)
coreutils/lib.a(cat.o) applets/built-in.o (cat_main)
coreutils/lib.a(catv.o) applets/built-in.o (catv_main)
coreutils/lib.a(chgrp.o) applets/built-in.o (chgrp_main)
coreutils/lib.a(chmod.o) applets/built-in.o (chmod_main)
coreutils/lib.a(chown.o) applets/built-in.o (chown_main)
coreutils/lib.a(chroot.o) applets/built-in.o (chroot_main)
coreutils/lib.a(cksum.o) applets/built-in.o (cksum_main)
coreutils/lib.a(cmp.o) applets/built-in.o (cmp_main)
coreutils/lib.a(comm.o) applets/built-in.o (comm_main)
coreutils/lib.a(cp.o) applets/built-in.o (cp_main)
coreutils/lib.a(cut.o) applets/built-in.o (cut_main)
。。。 。。。
.debug_abbrev 0x00000074 0x10 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/crtn.o
.debug_line 0x00000000 0x62d
*(.debug_line)
.debug_line 0x00000000 0xa6 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/crti.o
.debug_line 0x000000a6 0xcc /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivsi3.oS)
.debug_line 0x00000172 0xd8 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_divsi3.oS)
.debug_line 0x0000024a 0xbe /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_umodsi3.oS)
.debug_line 0x00000308 0xc4 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_modsi3.oS)
.debug_line 0x000003cc 0xb8 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_dvmd_lnx.oS)
.debug_line 0x00000484 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_muldi3.oS)
.debug_line 0x0000049e 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_lshrdi3.oS)
.debug_line 0x000004b8 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_ashldi3.oS)
.debug_line 0x000004d2 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_ashrdi3.oS)
.debug_line 0x000004ec 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_cmpdi2.oS)
.debug_line 0x00000506 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_floatdidf.oS)
.debug_line 0x00000520 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_divdi3.oS)
.debug_line 0x0000053a 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_moddi3.oS)
.debug_line 0x00000554 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivdi3.oS)
.debug_line 0x0000056e 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_umoddi3.oS)
.debug_line 0x00000588 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_clz.oS)
.debug_line 0x000005a2 0x8b /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/crtn.o
.debug_frame
*(.debug_frame)
.debug_str
*(.debug_str)
.debug_loc
*(.debug_loc)
.debug_macinfo
*(.debug_macinfo)
.debug_weaknames
*(.debug_weaknames)
.debug_funcnames
*(.debug_funcnames)
.debug_typenames
*(.debug_typenames)
.debug_varnames
*(.debug_varnames)
.note.gnu.arm.ident
*(.note.gnu.arm.ident)
/DISCARD/
*(.note.GNU-stack)
OUTPUT(busybox_unstripped elf32-littlearm)
collect2: ld returned 1 exit status
哈哈,3.4.1我也始终没通过,都是2.95下搞的
(2007-07-13 23:22:52)
redhat9 /home下 root权限
#dd if=/dev/zero of=/home/ramdisk bs=1k count=8192
# losetup /dev/loop2 ramdisk
# mkfs.ext2 /dev/loop2
#mkdir /mnt/ramdisk
# mount -t ext2 /dev/loop2 /mnt/ramdisk
#cd /mnt/ramdisk
拷贝需要的文件到ramdisk文件夹里面,才4M多点
#mknod -m 660 dev/console c 5 1
#mknod -m 660 dev/null c 1 3
#umount /dev/loop2
这时候出错,说这个设备现在忙。。。。
不卸载了,用gzip -9 ramdisk,出来的ramdisk.gz才8。4k大小。
帮帮我啊,谢谢了。
。。。这个问题嘛,重启试一下吧:)
(2007-06-04 20:10:57)
我现在试着做ramdisk,那么创建文件系统时,dev/ram0这个文件一定要创建吗,反正我创建了。
.config相关设置:
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=2048
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
现在linux启动到:
RAMDISK: Compressed image found at block 0
然后就死掉了,不知道怎么回事?
这个也真是麻烦,试试CONFIG_BLK_DEV_RAM_SIZE改大一点吧。8192?搞这个ramdisk时还没碰到过什么问题...
(2007-05-31 17:15:15)
CONFIG_CMDLINE="root=/dev/ram0 initrd=0xc400000,2M console=ttyS0,115200 init=/linuxrc" 这个是我的命令行,
创建文件系统时,dev/ram0这个文件要创建吗,反正我创建了。
现在linux启动到RAMDISK: Compressed image found at block 0,然后就死掉了,怎么回事?
用ramdisk作为文件系统的话,default command line,要这样写吗:“root=dev/ram0 initrd=0xa0800000,4M ramdisk=8192 ”
这几个都少不了吗,是什么意思呢?
/dev/ram0 这个文件也必须创建吗
/dev/ram0是ramdisk的节点文件,内核创建的。
initrd是ramdisk的载入地址。
后面就是大小了。
这些都是用来通知内核,我要使用的ramdisk具体是怎么的。
(2007-05-31 12:49:26)
lost+found文件夹
是什么东西,没整明白
#dd if=/dev/zero of=/dev/ram1 bs=1k ount=8000
# losetup /dev/loop2 ramdisk
这个是不是有问题?
我这么用的:
# dd if=/dev/zero of=ramdisk bs=1k count=8000
# losetup /dev/loop2 ramdisk
# mkfs.ext2 /dev/loop2
# mount -t ext2 /dev/loop2 /mnt/ramdisk
发现 /mnt/ramdisk下面只有lost+found文件夹,这个正常吗
#dd if=/dev/zero of=/dev/ram1 bs=1k ount=8000
这句确实有问题,少了个“C”:)
lost+found相当于windows的垃圾桶,正常的。
(2007-05-31 12:47:21)
-sh: can't access tty; job control turned off
这句提示是什么意思,对系统有什么影响?我的也有提示这一句,正在努力解决中.
出现这句话的原因有很多,google一搜就大把,我遇到过的只有一次busybox的编译不完整时出现,make clean & make 就ok了。
(2007-05-27 17:17:20)
偶再加一句,新的busybox中有mdev,和udev比较相似,可以试试.
哦,谢谢。关于mdev,可以参考我的文章《EV on embeded Linux-2.6.19.2》
http://weibing.blogbus.com/logs/4485453.html
里面有关于mdev的一点应用 :)
(2007-03-20 21:20:36)
嵌入式用uclibc吧.
没有udev可以自己复制/dev出来,一样用.
呵呵,uclibc下载很久了,不过现在还不断地测试驱动,没时间也没需要去搞它 ^_^
使用udev只不过方便而以,如果确实有需要,或者说有这个时间,所有都可以自己用shell写...但既然已经有朋友做出这么好的东西,不用岂不是有点浪费?
(2007-03-04 22:40:28)
原来去掉对旧内核的支持 (Support version 2.2.x to 2.4.x Linux kernels) 就可以安装 Module Utilities ^_^