【记录】Ubuntu下为QEMU建立一个arm平台的可用的根文件系统rootfs
折腾:
【记录】尝试用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的命令行了。