LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: xhjun_csu

关于在u盘上制作linux

[复制链接]
发表于 2006-12-20 22:33:43 | 显示全部楼层
今天按 Cross-Compiled Linux From Scratch - Embedded 做下来,最后弄到优盘上可是内核都动不起来。我想多办是工具链那儿出错了。在编译期间没出现任何问题。不过这么做下来是很小。uclibc+busybox+kernel不压缩也不会超过12mb。可惜出错,不然我32mb的优盘可直接弄个X了。先得解决ppp和rp-pppoe。不然adsl上不了网。今天太累,明天继续重新弄,直到成功。
回复 支持 反对

使用道具 举报

发表于 2006-12-21 00:37:36 | 显示全部楼层
嗯,这样的话真的不错,祝你成功。顺便问一下,uclibc编译起来要的时间长吗?还有就是你准备从源代码编译x?准备编译xfree86呢还是xorg?

Post by 松心心
今天按 Cross-Compiled Linux From Scratch - Embedded 做下来,最后弄到优盘上可是内核都动不起来。我想多办是工具链那儿出错了。在编译期间没出现任何问题。不过这么做下来是很小。uclibc+busybox+kernel不压缩也不会超过12mb。可惜出错,不然我32mb的优盘可直接弄个X了。先得解决ppp和rp-pppoe。不然adsl上不了网。今天太累,明天继续重新弄,直到成功。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-21 11:16:50 | 显示全部楼层
无法mount根文件系统。kernel现在执行到了initrd.img中的初始化文件init,init内容如下:

  1. #!/bin/sh

  2. mkdir /sys
  3. mkdir /proc
  4. mkdir /tmp
  5. mkdir -p /var/lock
  6. mount -t sysfs none /sys
  7. mount -t proc none /proc

  8. # Note that this only becomes /dev on the real filesystem if udev's scripts
  9. # are used; which they will be, but it's worth pointing out
  10. mount -t tmpfs -o mode=0755 udev /dev
  11. touch /dev/.initramfs-tools
  12. mkdir /dev/.initramfs
  13. mknod /dev/console c 5 1
  14. mknod /dev/null c 1 3

  15. # Export the dpkg architecture
  16. export DPKG_ARCH=
  17. . /conf/arch.conf

  18. # Bring in the main config
  19. . /conf/initramfs.conf
  20. for i in conf/conf.d/*; do
  21.         [ -f ${i} ] && . ${i}
  22. done
  23. . /scripts/functions

  24. # Parse command line options
  25. export break=
  26. export init=/sbin/init
  27. export quiet=n
  28. export readonly=y
  29. export ROOT=
  30. export resume=${RESUME}
  31. export rootmnt=/root
  32. export debug=
  33. for x in $(cat /proc/cmdline); do
  34.         case $x in
  35.         init=*)
  36.                 init=${x#init=}
  37.                 ;;
  38.         root=*)
  39.                 ROOT=${x#root=}
  40.                 case $ROOT in
  41.                 LABEL=*)
  42.                         ROOT="/dev/disk/by-label/${ROOT#LABEL=}"
  43.                         ;;
  44.                 UUID=*)
  45.                         ROOT="/dev/disk/by-uuid/${ROOT#UUID=}"
  46.                         ;;
  47.                 esac
  48.                 ;;
  49.         nfsroot=*)
  50.                 NFSROOT=${x#nfsroot=}
  51.                 ;;
  52.         boot=*)
  53.                 BOOT=${x#boot=}
  54.                 ;;
  55.         resume=*)
  56.                 resume=${x#resume=}
  57.                 ;;
  58.         quiet)
  59.                 quiet=y
  60.                 ;;
  61.         ro)
  62.                 readonly=y
  63.                 ;;
  64.         rw)
  65.                 readonly=n
  66.                 ;;
  67.         debug)
  68.                 debug=y
  69.                 exec >/tmp/initramfs.debug 2>&1
  70.                 set -x
  71.                 ;;
  72.         break=*)
  73.                 break=${x#break=}
  74.                 ;;
  75.         break)
  76.                 break=premount
  77.                 ;;
  78.         esac
  79. done

  80. depmod -a
  81. maybe_break top

  82. # Don't do log messages here to avoid confusing usplash
  83. run_scripts /scripts/init-top

  84. . /scripts/${BOOT}
  85. parse_numeric ${ROOT}

  86. maybe_break modules
  87. log_begin_msg "Loading essential drivers..."
  88. load_modules
  89. log_end_msg

  90. maybe_break premount
  91. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount"
  92. run_scripts /scripts/init-premount
  93. [ "$quiet" != "y" ] && log_end_msg

  94. maybe_break mount
  95. log_begin_msg "Mounting root file system..."
  96. mountroot
  97. log_end_msg

  98. maybe_break bottom
  99. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
  100. run_scripts /scripts/init-bottom
  101. [ "$quiet" != "y" ] && log_end_msg

  102. # Move virtual filesystems over to the real filesystem
  103. mount -n -o move /sys ${rootmnt}/sys
  104. mount -n -o move /proc ${rootmnt}/proc

  105. while [ ! -x ${rootmnt}${init} ]; do
  106.         panic "Target filesystem doesn't have ${init}"
  107. done

  108. maybe_break init

  109. # Unset the problematic debug variable and chain to real filesystem
  110. unset debug
  111. exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console

复制代码

shell我学得很浅,这个脚本中很多看不懂。-_-
解压完内核之后,执行这个脚本的时候提示说找不到/etc/fstab这个文件,没办法,我把这个img解压,在他的etc目录下建立了一个fstab,内容如下:

  1. # /etc/fstab: static file system information.
  2. #
  3. # <file system> <mount point>   <type>  <options>       <dump>  <pass>
  4. proc                     /proc              proc      defaults        0       0
  5. LABEL=/              /                    ext2      defaults        1         1
  6. /dev/sda1            /root               ext2       defaults,errors=remount-ro 0       1
复制代码

添加了这个文件之后,错误变成了etc/fstab :/root  invalid argument.
感觉自己现在在一顿乱搞。我该看看看看哪些方面的文档?
回复 支持 反对

使用道具 举报

发表于 2006-12-21 15:46:06 | 显示全部楼层
Post by xhjun_csu
无法mount根文件系统。kernel现在执行到了initrd.img中的初始化文件init,init
[/code]
shell我学得很浅,这个脚本中很多看不懂。-_-
解压完内核之后,执行这个脚本的时候提示说找不到/etc/fstab这个文件,没办法,我把这个img解压,在他的etc目录下建立了一个fstab,内容如下:

  1. # /etc/fstab: static file system information.
  2. #
  3. # <file system> <mount point>   <type>  <options>       <dump>  <pass>
  4. proc                     /proc              proc      defaults        0       0
  5. LABEL=/              /                    ext2      defaults        1         1
  6. /dev/sda1            /root               ext2       defaults,errors=remount-ro 0       1
复制代码

添加了这个文件之后,错误变成了etc/fstab :/root  invalid argument.
感觉自己现在在一顿乱搞。我该看看看看哪些方面的文档?


似乎fstab文件有错了,应该改成你的根挂载路径,而第三行你把整个U盘挂成/root目录是不是有问题呀,这样你的根文件系统就不存在了
我也是刚学,说错了别见怪
回复 支持 反对

使用道具 举报

发表于 2006-12-21 17:28:43 | 显示全部楼层
linux启动过程是这样的,
bios->bootloader->kernel(+initrd/initramfs)->/->init->rcS->fstab.
其实fstab出错没有太大关系,你的问题可能是内存中的根文件系统加载好了,但是转换到u盘根文件系统的时候出问题了。解决的办法是修改rcS,请仔细看看busybox的文档。
建议先不要转换根文件系统试试看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-21 18:58:13 | 显示全部楼层
我胡乱改了一下init脚本,现在可以进入到busybox提示符下面了,不过中间还是会有一大堆错误。
现在没时间研究这些了,毕竟自己是个业余选手。先放一放,要准备开题了,太费时间了,而且我的电脑估计这么不停地重启会整挂的。-_-,寒假有时间再弄吧。
回复 支持 反对

使用道具 举报

发表于 2006-12-21 19:31:34 | 显示全部楼层
Post by Sandr0
嗯,这样的话真的不错,祝你成功。顺便问一下,uclibc编译起来要的时间长吗?还有就是你准备从源代码编译x?准备编译xfree86呢还是xorg?


     今天gentoo升级没来得及做。我是按照clfs文档Current Embedded Development来做的。这样整个过程要少得多,uclibc比glibc编译好象要快近一半吧。哪天有空认真重头做一下。考虑好了在上优盘。不然反复重启机子也够受的。
回复 支持 反对

使用道具 举报

发表于 2006-12-22 00:26:38 | 显示全部楼层
楼上两位,不想反复重启的话,可以用虚拟机嘛,呵呵,我那些不知道对错的知识都是这么一次一次反复试出来的,:-)
祝你们成功!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-22 09:35:41 | 显示全部楼层
楼上的,vmware-player如何设置u盘启动?他的bios里面boot这一项没有usb启动。有其他解决方法么?
回复 支持 反对

使用道具 举报

发表于 2006-12-22 17:54:29 | 显示全部楼层
应该不行吧,要不然试试修改.vmx配置文件看看,bios启动菜单选可移动媒体。我以前用vmware server可以启动的。用u盘启动支持还是不够,我一般是现在硬盘的分区上做好无错,然后再转到u盘测试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表