【背景】
折腾:
【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs
期间,折腾完毕,可以运行kernel:
后,接着再去参考那人的教程:
去弄rootfs。
【折腾过程】
1.先去交叉编译busybox:
【记录】Ubuntu下为QEMU的arm平台交叉编译BusyBox
2.再去用cpio创建压缩格式的rootfs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 | crifan@ubuntu:busybox-1.16.0$ ls applets busybox.links console-tools editors _install loginutils Makefile.help procps shell util-linux arch busybox_unstripped coreutils examples INSTALL mailutils miscutils README sysklogd archival busybox_unstripped.map debianutils findutils libbb Makefile modutils runit testsuite AUTHORS busybox_unstripped.out docs include libpwdgrp Makefile.custom networking scripts TODO busybox Config. in e2fsprogs init LICENSE Makefile.flags printutils selinux TODO_config_nommu crifan@ubuntu:busybox-1.16.0$ cd _install/ crifan@ubuntu:_install$ find . . . /usr . /usr/bin . /usr/bin/traceroute . /usr/bin/setkeycodes . /usr/bin/ar . /usr/bin/sha512sum . /usr/bin/setsid . /usr/bin/pscan . /usr/bin/arping . /usr/bin/script . /usr/bin/length . /usr/bin/ifplugd . /usr/bin/nohup . /usr/bin/seq . /usr/bin/cryptpw . /usr/bin/nc . /usr/bin/find . /usr/bin/hostid . /usr/bin/mkfifo . /usr/bin/ipcs . /usr/bin/cmp . /usr/bin/bunzip2 . /usr/bin/logger . /usr/bin/ether-wake . /usr/bin/unexpand . /usr/bin/passwd . /usr/bin/sha256sum . /usr/bin/cut . /usr/bin/head . /usr/bin/tee . /usr/bin/tr . /usr/bin/runsv . /usr/bin/lzopcat . /usr/bin/tac . /usr/bin/deallocvt . /usr/bin/softlimit . /usr/bin/tail . /usr/bin/ [ . /usr/bin/eject . /usr/bin/vlock . /usr/bin/wget . /usr/bin/yes . /usr/bin/fdformat . /usr/bin/tty . /usr/bin/envuidgid . /usr/bin/env . /usr/bin/last . /usr/bin/install . /usr/bin/sum . /usr/bin/uniq . /usr/bin/who . /usr/bin/runsvdir . /usr/bin/id . /usr/bin/whoami . /usr/bin/ [[ . /usr/bin/killall5 . /usr/bin/tftpd . /usr/bin/dos2unix . /usr/bin/nslookup . /usr/bin/dirname . /usr/bin/ftpput . /usr/bin/du . /usr/bin/top . /usr/bin/sha1sum . /usr/bin/beep . /usr/bin/fuser . /usr/bin/kbd_mode . /usr/bin/realpath . /usr/bin/chat . /usr/bin/setuidgid . /usr/bin/nmeter . /usr/bin/lpq . /usr/bin/resize . /usr/bin/lzmacat . /usr/bin/envdir . /usr/bin/lpr . /usr/bin/readlink . /usr/bin/hd . /usr/bin/ftpget . /usr/bin/uptime . /usr/bin/timeout . /usr/bin/uuencode . /usr/bin/hexdump . /usr/bin/fold . /usr/bin/printf . /usr/bin/tcpsvd . /usr/bin/crontab . /usr/bin/patch . /usr/bin/readahead . /usr/bin/uudecode . /usr/bin/renice . /usr/bin/time . /usr/bin/cal . /usr/bin/pgrep . /usr/bin/wall . /usr/bin/tftp . /usr/bin/showkey . /usr/bin/udpsvd . /usr/bin/clear . /usr/bin/mkpasswd . /usr/bin/free . /usr/bin/basename . /usr/bin/chrt . /usr/bin/which . /usr/bin/strings . /usr/bin/awk . /usr/bin/unzip . /usr/bin/logname . /usr/bin/comm . /usr/bin/ttysize . /usr/bin/md5sum . /usr/bin/unlzop . /usr/bin/chvt . /usr/bin/mesg . /usr/bin/less . /usr/bin/bzcat . /usr/bin/expr . /usr/bin/xargs . /usr/bin/openvt . /usr/bin/split . /usr/bin/microcom . /usr/bin/bzip2 . /usr/bin/rx . /usr/bin/reset . /usr/bin/killall . /usr/bin/chpst . /usr/bin/sort . /usr/bin/sv . /usr/bin/ipcrm . /usr/bin/dc . /usr/bin/cksum . /usr/bin/unlzma . /usr/bin/telnet . /usr/bin/od . /usr/bin/volname . /usr/bin/wc . /usr/bin/unix2dos . /usr/bin/dumpleases . /usr/bin/diff . /usr/bin/test . /usr/bin/expand . /usr/bin/pkill . /usr/bin/rtcwake . /usr/sbin . /usr/sbin/telnetd . /usr/sbin/rdev . /usr/sbin/setfont . /usr/sbin/udhcpd . /usr/sbin/sendmail . /usr/sbin/svlogd . /usr/sbin/inetd . /usr/sbin/ftpd . /usr/sbin/lpd . /usr/sbin/chpasswd . /usr/sbin/crond . /usr/sbin/chroot . /usr/sbin/fbset . /usr/sbin/brctl . /usr/sbin/rdate . /usr/sbin/dnsd . /usr/sbin/fakeidentd . /usr/sbin/setlogcons . /usr/sbin/dhcprelay . /usr/sbin/popmaildir . /usr/sbin/httpd . /usr/sbin/loadfont . /usr/sbin/readprofile . /bin . /bin/hostname . /bin/date . /bin/ping6 . /bin/pipe_progress . /bin/stty . /bin/run-parts . /bin/vi . /bin/msh . /bin/egrep . /bin/gunzip . /bin/addgroup . /bin/more . /bin/usleep . /bin/linux64 . /bin/mt . /bin/uncompress . /bin/sleep . /bin/iptunnel . /bin/zcat . /bin/ps . /bin/iproute . /bin/linux32 . /bin/ash . /bin/df . /bin/cp . /bin/ed . /bin/ping . /bin/ipcalc . /bin/iplink . /bin/fgrep . /bin/cpio . /bin/stat . /bin/scriptreplay . /bin/dd . /bin/ls . /bin/netstat . /bin/tar . /bin/pwd . /bin/fsync . /bin/kill . /bin/iprule . /bin/touch . /bin/umount . /bin/hush . /bin/rmdir . /bin/sed . /bin/sh . /bin/chown . /bin/reformime . /bin/setarch . /bin/mkdir . /bin/cttyhack . /bin/getopt . /bin/false . /bin/deluser . /bin/printenv . /bin/adduser . /bin/gzip . /bin/lzop . /bin/login . /bin/ip . /bin/su . /bin/mv . /bin/rm . /bin/makemime . /bin/chattr . /bin/sync . /bin/dnsdomainname . /bin/watch . /bin/fdflush . /bin/ipaddr . /bin/ln . /bin/busybox . /bin/mknod . /bin/delgroup . /bin/nice . /bin/mountpoint . /bin/pidof . /bin/lsattr . /bin/dumpkmap . /bin/uname . /bin/echo . /bin/chmod . /bin/grep . /bin/cat . /bin/chgrp . /bin/ionice . /bin/mount . /bin/mktemp . /bin/catv . /bin/dmesg . /bin/true . /sbin . /sbin/ifenslave . /sbin/watchdog . /sbin/klogd . /sbin/fsck .minix . /sbin/getty . /sbin/losetup . /sbin/udhcpc . /sbin/reboot . /sbin/runlevel . /sbin/init . /sbin/mkfs .vfat . /sbin/devmem . /sbin/sulogin . /sbin/swapon . /sbin/hwclock . /sbin/depmod . /sbin/vconfig . /sbin/setconsole . /sbin/hdparm . /sbin/insmod . /sbin/lsmod . /sbin/route . /sbin/fdisk . /sbin/ifup . /sbin/adjtimex . /sbin/loadkmap . /sbin/ifdown . /sbin/tunctl . /sbin/switch_root . /sbin/raidautorun . /sbin/slattach . /sbin/mdev . /sbin/mkdosfs . /sbin/mkswap . /sbin/fbsplash . /sbin/freeramdisk . /sbin/nameif . /sbin/ifconfig . /sbin/logread . /sbin/syslogd . /sbin/mkfs .minix . /sbin/findfs . /sbin/man . /sbin/modprobe . /sbin/pivot_root . /sbin/sysctl . /sbin/blkid . /sbin/arp . /sbin/zcip . /sbin/makedevs . /sbin/swapoff . /sbin/fsck . /sbin/rmmod . /sbin/halt . /sbin/poweroff . /sbin/start-stop-daemon . /linuxrc crifan@ubuntu:_install$ find . | cpio -o -- format =newc > .. /rootfs .img 3520 blocks crifan@ubuntu:_install$ cd .. crifan@ubuntu:busybox-1.16.0$ ls applets busybox.links console-tools editors _install loginutils Makefile.help procps selinux TODO_config_nommu arch busybox_unstripped coreutils examples INSTALL mailutils miscutils README shell util-linux archival busybox_unstripped.map debianutils findutils libbb Makefile modutils rootfs.img sysklogd AUTHORS busybox_unstripped.out docs include libpwdgrp Makefile.custom networking runit testsuite busybox Config. in e2fsprogs init LICENSE Makefile.flags printutils scripts TODO crifan@ubuntu:busybox-1.16.0$ ls rootfs.img -lha -rw-rw-r-- 1 crifan crifan 1.8M Aug 19 00:17 rootfs.img crifan@ubuntu:busybox-1.16.0$ gzip -c rootfs.img > rootfs.img.gz crifan@ubuntu:busybox-1.16.0$ ls rootfs.img* -lha -rw-rw-r-- 1 crifan crifan 1.8M Aug 19 00:17 rootfs.img -rw-rw-r-- 1 crifan crifan 965K Aug 19 00:18 rootfs.img.gz crifan@ubuntu:busybox-1.16.0$ |
3.然后去测试一下:
1 2 3 4 5 6 7 8 | crifan@ubuntu:busybox-1.16.0$ ls applets busybox_unstripped debianutils include LICENSE Makefile.help README shell zImage arch busybox_unstripped.map docs init loginutils miscutils rootfs.img sysklogd archival busybox_unstripped.out e2fsprogs _install mailutils modutils rootfs.img.gz testsuite AUTHORS Config. in editors INSTALL Makefile networking runit TODO busybox console-tools examples libbb Makefile.custom printutils scripts TODO_config_nommu busybox.links coreutils findutils libpwdgrp Makefile.flags procps selinux util-linux crifan@ubuntu:busybox-1.16.0$ qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/bin/sh" |
然后是可以正常进入rootfs,进入linux命令行了:
而且的确是ps和mount都没有东西:
4.去操作:
1 2 | # mkdir /proc # mount -t proc none /proc |
效果如图:
5.的确,dev下面只有console:
所以去
1 2 3 | # mkdir /sys # mount -t sysfs none /sys # mdev -s |
效果是:
6.对应的,接着去Ubuntu下我们此处的busybox中,去创建对应的启动内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | crifan@ubuntu:busybox-1.16.0$ cd _install/ crifan@ubuntu:_install$ pwd /home/crifan/develop/embedded/qemu/rootfs/busybox/busybox-1 .16.0 /_install crifan@ubuntu:_install$ ls bin linuxrc sbin usr crifan@ubuntu:_install$ mkdir proc sys dev etc etc /init .d crifan@ubuntu:_install$ ls -lha total 36K drwxrwxr-x 9 crifan crifan 4.0K Aug 19 00:33 . drwxr-xr-x 32 crifan crifan 4.0K Aug 19 00:22 .. drwxrwxr-x 2 crifan crifan 4.0K Aug 19 00:15 bin drwxrwxr-x 2 crifan crifan 4.0K Aug 19 00:33 dev drwxrwxr-x 3 crifan crifan 4.0K Aug 19 00:33 etc lrwxrwxrwx 1 crifan crifan 11 Aug 19 00:15 linuxrc -> bin /busybox drwxrwxr-x 2 crifan crifan 4.0K Aug 19 00:33 proc drwxrwxr-x 2 crifan crifan 4.0K Aug 19 00:15 sbin drwxrwxr-x 2 crifan crifan 4.0K Aug 19 00:33 sys drwxrwxr-x 4 crifan crifan 4.0K Aug 19 00:15 usr crifan@ubuntu:_install$ cd .. crifan@ubuntu:busybox-1.16.0$ gedit _install /etc/init .d /rcS |
对应内容是:
1 2 3 4 | #!/bin/sh mount -t proc none /proc mount -t sysfs none /sys /sbin/mdev -s |
然后添加可执行的权限:
1 2 3 4 5 6 7 | crifan@ubuntu:busybox-1.16.0$ chmod +x _install /etc/init .d /rcS crifan@ubuntu:busybox-1.16.0$ ls _install /etc/init .d/ -lha total 12K drwxrwxr-x 2 crifan crifan 4.0K Aug 19 00:34 . drwxrwxr-x 3 crifan crifan 4.0K Aug 19 00:33 .. -rwxrwxr-x 1 crifan crifan 74 Aug 19 00:34 rcS crifan@ubuntu:busybox-1.16.0$ |
重新创建rootfs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | crifan@ubuntu:busybox-1.16.0$ cd _install/ crifan@ubuntu:_install$ find . | cpio -o -- format =newc > .. /rootfs .img 3522 blocks crifan@ubuntu:_install$ cd .. crifan@ubuntu:busybox-1.16.0$ gzip -c rootfs.img > rootfs.img.gz crifan@ubuntu:busybox-1.16.0$ ls -lha total 11M drwxr-xr-x 32 crifan crifan 4.0K Aug 19 00:22 . drwxrwxr-x 3 crifan crifan 4.0K Aug 19 00:08 .. drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:14 applets drwxr-xr-x 3 crifan crifan 4.0K Jan 24 2010 arch drwxr-xr-x 4 crifan crifan 4.0K Aug 19 00:15 archival -rw-r--r-- 1 crifan crifan 5.1K Jan 24 2010 AUTHORS -rwxrwxr-x 1 crifan crifan 1.7M Aug 19 00:15 busybox -rw-rw-r-- 1 crifan crifan 4.3K Aug 19 00:15 busybox.links -rwxrwxr-x 1 crifan crifan 2.1M Aug 19 00:15 busybox_unstripped -rw-rw-r-- 1 crifan crifan 1.8K Aug 19 00:15 .busybox_unstripped.cmd -rw-rw-r-- 1 crifan crifan 1.7M Aug 19 00:15 busybox_unstripped.map -rw-rw-r-- 1 crifan crifan 109K Aug 19 00:15 busybox_unstripped.out -rw-rw-r-- 1 crifan crifan 22K Aug 19 00:14 .config -rw-r--r-- 1 crifan crifan 20K Jan 25 2010 Config. in -rw-rw-r-- 1 crifan crifan 22K Aug 19 00:13 .config.old drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 console-tools drwxr-xr-x 3 crifan crifan 12K Aug 19 00:15 coreutils drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 debianutils drwxr-xr-x 3 crifan crifan 4.0K Jan 24 2010 docs drwxr-xr-x 3 crifan crifan 4.0K Aug 19 00:15 e2fsprogs drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 editors drwxr-xr-x 5 crifan crifan 4.0K Jan 24 2010 examples drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 findutils -rw-r--r-- 1 crifan crifan 231 Jan 24 2010 .gitignore drwxr-xr-x 3 crifan crifan 4.0K Aug 19 00:14 include -rw-r--r-- 1 crifan crifan 871 Jan 24 2010 .indent.pro drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 init drwxrwxr-x 9 crifan crifan 4.0K Aug 19 00:33 _install -rw-r--r-- 1 crifan crifan 5.7K Jan 24 2010 INSTALL -rw-rw-r-- 1 crifan crifan 614 Aug 19 00:14 .kconfig.d -rw-rw-r-- 1 crifan crifan 7 Aug 19 00:14 .kernelrelease drwxr-xr-x 2 crifan crifan 20K Aug 19 00:15 libbb drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 libpwdgrp -rw-r--r-- 1 crifan crifan 18K Jan 24 2010 LICENSE drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 loginutils drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 mailutils -rw-r--r-- 1 crifan crifan 42K Jan 25 2010 Makefile -rw-r--r-- 1 crifan crifan 5.4K Jan 24 2010 Makefile.custom -rw-r--r-- 1 crifan crifan 4.3K Jan 24 2010 Makefile.flags -rw-r--r-- 1 crifan crifan 2.0K Jan 24 2010 Makefile.help drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 miscutils drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 modutils drwxr-xr-x 4 crifan crifan 4.0K Aug 19 00:15 networking drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 printutils drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 procps -rw-r--r-- 1 crifan crifan 8.6K Jan 24 2010 README -rw-rw-r-- 1 crifan crifan 1.8M Aug 19 00:37 rootfs.img -rw-rw-r-- 1 crifan crifan 965K Aug 19 00:38 rootfs.img.gz drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 runit drwxr-xr-x 4 crifan crifan 4.0K Jan 25 2010 scripts drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 selinux drwxr-xr-x 5 crifan crifan 4.0K Aug 19 00:15 shell drwxr-xr-x 2 crifan crifan 4.0K Aug 19 00:15 sysklogd drwxr-xr-x 45 crifan crifan 4.0K Jan 24 2010 testsuite -rw-r--r-- 1 crifan crifan 15K Jan 24 2010 TODO -rw-r--r-- 1 crifan crifan 21K Jan 24 2010 TODO_config_nommu drwxr-xr-x 3 crifan crifan 4.0K Aug 19 00:15 util-linux -rwxrwxr-x 1 crifan crifan 1.9M Aug 19 00:22 zImage crifan@ubuntu:busybox-1.16.0$ |
重新测试运行:
qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/sbin/init"
然后就可以看到熟悉的:
please press enter to active this console
了:
以及,可以看到对应的sys文件夹,mount的内容了:
至此,参考教程的折腾,算是结束了。
【总结】
至此,参考教程,完成了:
使用BusyBox作为最基本的,从ram启动的rootfs,可以正常的进入linux的命令行了。