linux lab4 一些错误集锦

mkfs.ext3 myinitrd4M.img 格式化成ext3文件系统,将镜像挂载到目录


qemu -kernel linux-
3.2.1/arch/x86/boot/bzImage -initrd
myinitrd4M.img -append "root=/dev/ram
init=/init"

加载内核,将跟文件系统的1号文件启动起来


进入到/rootfs所在目录,执行

qemu -kernel /usr/src/linux-3.9.4/arch/x86/boot/bzImage -initrd myinitrd4M.img -append "root=/dev/ram init=/init"



ubuntu 下找不到qemu命令,转至usr/bin目录,输入q,按tab键匹配有:

解决方案:
使用qemu-system-i386或qemu-system-x86_64指令替换qemu指令。
可以建立一条软链接,这样就还可以使用qemu命令了:
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu


think@ubuntu:~$ sudo losetup /dev/loop0 tiger
[sudo] password for think:
losetup: /dev/loop0: device is busy
 

Tiger-John 说明:

在此处使用sudo losetup /dev/loop0  命令时系统提示错误:losetup: /dev/loop0: device is busy。

说明有设备在使用 loopback 设备 ,我们可以用 /dev/loop1或 /dev/loop2来 代替 /dev/loop0,直到有一个空闲的 loopback 设备。



1. loop 设备介绍
在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。

在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。

上面说的文件格式,我们经常见到的是 CD 或 DVD 的 ISO 光盘镜像文件或者是软盘(硬盘)的 *.img 镜像文件。通过这种 loop mount (回环mount)的方式,这些镜像文件就可以被 mount 到当前文件系统的一个目录下。

至此,顺便可以再理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。

在 Linux 里,loop 设备的设备名形如:
引用 
ls /dev/loop*
/dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6
/dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7
... ...

例如,要在一个目录下 mount 一个包含有磁盘镜像的文件,需要分 2 步走:
引用 
losetup /dev/loop0 disk.img #使磁盘镜像文件与循环设备连结起来
mount /dev/loop0 /home/groad/disk_test #将循环设备 mount 到目录 disk_test 下

经过上面的两个命令后,镜像文件就如同一个文件系统挂载在 disk_test 目录下,当然我们也可以往镜像里面添加文件。

其实上面的两个步骤可以写成一个步骤:
引用 
mount -t minix -o loop ./disk.img ./disk_test

其中,加了 -o loop 指定后,那么也就相当于执行了第一行的 losetup 命令。做一个简单的试验可以证明一点,首先分开执行 losetup 和 mount 命令,那么我们看到我们可以 mount 的是 /dev/loop0 这个设备。当我们在 mount 中指定参数 -o loop 时,镜像文件其实已和 /dev/loop1 相关联,这里我们在挂载镜像文件后,尝试再执行一下 mount -t minix /dev/loop1 ./disk_test 来验证,它会得到提示:
引用 
linux-z13e:/usr/local/share/bochs/Linux011/temp # mount -t minix /dev/loop1 ./test_dir/ 
mount: /dev/loop1 already mounted or ./test_dir/ busy
mount: according to mtab, /dev/loop1 is already mounted on /usr/local/share/bochs/Linux011/temp/test_dir


最后,要卸载的话,就直接 umount /dev/loop0 即可。关于 losetup 的介绍见:http://www.groad.net/bbs/read.php?tid-2353.html



编译busybox出错:
==========
networking/lib.a(nslookup.o): In function `print_host':
nslookup.c:(.text.print_host+0x42): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(ipcalc.o): In function `ipcalc_main':
ipcalc.c:(.text.ipcalc_main+0x229): warning: Using 'gethostbyaddr' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
util-linux/lib.a(mount.o): In function `nfsmount':
mount.c:(.text.nfsmount+0xd1): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(inetd.o): In function `reread_config_file':
inetd.c:(.text.reread_config_file+0x6f9): warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(netstat.o): In function `ip_port_str':
netstat.c:(.text.ip_port_str+0x3d): warning: Using 'getservbyport' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(inetd.o): In function `reread_config_file':
inetd.c:(.text.reread_config_file+0x675): warning: Using 'getrpcbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(inetd.o): In function `unregister_rpc':
inetd.c:(.text.unregister_rpc+0x17): undefined reference to `pmap_unset'
networking/lib.a(inetd.o): In function `register_rpc':
inetd.c:(.text.register_rpc+0x4e): undefined reference to `pmap_unset'
inetd.c:(.text.register_rpc+0x75): undefined reference to `pmap_set'
networking/lib.a(inetd.o): In function `prepare_socket_fd':
inetd.c:(.text.prepare_socket_fd+0x8a): undefined reference to `bindresvport'
util-linux/lib.a(mount.o): In function `nfsmount':
mount.c:(.text.nfsmount+0x825): undefined reference to `pmap_getmaps'
mount.c:(.text.nfsmount+0x996): undefined reference to `clntudp_create'
mount.c:(.text.nfsmount+0x9fe): undefined reference to `clnttcp_create'
mount.c:(.text.nfsmount+0xa26): undefined reference to `clnt_spcreateerror'
mount.c:(.text.nfsmount+0xa35): undefined reference to `authunix_create_default'
mount.c:(.text.nfsmount+0xabe): undefined reference to `clnt_sperror'
mount.c:(.text.nfsmount+0xae6): undefined reference to `clnt_sperror'
mount.c:(.text.nfsmount+0xc97): undefined reference to `bindresvport'
mount.c:(.text.nfsmount+0xced): undefined reference to `pmap_getport'
util-linux/lib.a(mount.o): In function `xdr_fhstatus':
mount.c:(.text.xdr_fhstatus+0x15): undefined reference to `xdr_u_int'
mount.c:(.text.xdr_fhstatus+0x3b): undefined reference to `xdr_opaque'
util-linux/lib.a(mount.o): In function `xdr_dirpath':
mount.c:(.text.xdr_dirpath+0x1b): undefined reference to `xdr_string'
util-linux/lib.a(mount.o): In function `xdr_mountres3':
mount.c:(.text.xdr_mountres3+0x15): undefined reference to `xdr_enum'
mount.c:(.text.xdr_mountres3+0x40): undefined reference to `xdr_bytes'
mount.c:(.text.xdr_mountres3+0x4e): undefined reference to `xdr_int'
mount.c:(.text.xdr_mountres3+0x74): undefined reference to `xdr_array'
collect2: ld returned 1 exit status
make: *** [busybox_unstripped] Error 1


 重新配置 $ make menuconfig
 Linux System Utilities  --->  [ ]   Support mounting NFS file systems 网络文件系统
 Networking Utilities  ---> [ ] inetd (Internet 超级服务器 )
版本较高,默认支持功能较多,去掉编译不过的功能,如上。

编译成功!!!!哈哈呵呵!!!!



initrd文件的功能主要有两个:

1、提供开机必需的但kernel文件(即vmlinuz)没有提供的驱动模块(modules)

 2、负责加载硬盘上的根文件系统并执行其中的/sbin/init程序进而将开机过程持续下去


重新来:
在linux中删除一个目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可解决。
直接rm就可以了,不过要加两个参数-rf 即:rm -rf   目录名字
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思

删除文件夹实例:rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹

需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的,一旦删除不可恢复.

make[2]: *** [silentoldconfig] 错误 1
make[1]: *** [silentoldconfig] 错误 2
make: *** 没有规则可以创建“include/config/kernel.release”需要的目标“include/config/auto.conf”。 停止。

开始没搞懂,目标 auto.conf 也存在啊,而且不是 root 所有的,普通用户直接编译应该也没问题啊,
上网一查,说是root问题,又切换到root 编译,果然...
可能之前用root 编译,有其他文件 已经是root所有了,

知道原因后,解决这个问题的方法就很显然了:
1、切回到root去make kernel。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值