首先让我们先了解一下LINUX下USB设备,LinuxUSB驱动程序有三种不同的USB主控制器选项,这是因为在主板和PCI卡上有三种不同类型的USB芯片。"EHCI"驱动程序设计成为实现新的高速USB2.0协议的芯片提供支持。"OHCI"驱动程序用来为非PC系统上的(以及带有SiS和ALi芯片组的PC主板上的)USB芯片提供支持。"UHCI"驱动程序用来为大多数其它PC主板(包括Intel和Via)上的USB实现提供支持。只需选择与希望启用的USB支持的类型对应的"?HCI"驱动程序即可。
启用了"USBsupport"和适当的"?HCI"USB主控制器驱动程序后,使USB启动并运行只需再进行几个步骤。应该启用"PreliminaryUSBdevicefilesystem",SCSI计算机标准接口,因为通常我们的USB存储设备,模拟为SCSI硬盘而进行访问
一、关于内核
usb-storage模块包括在内核但是由于U盘的初始化过程比执行/sbin/init慢,导致内核已经启动完成了,优盘还没有完成初始化工作,因此根文件系统没有加载,这时执行/sbin/init命令肯定不成功。所以要对系统内核初始化代码作修改如下:
/init/do_mounts.c
……
*Allowtheusertodistinguishbetweenfailedopen
*andbadsuperblockonrootdevice.
*/
-printk("VFS:Cannotopenrootdevice"%s"or%s",
+printk("VFS:Cannotopenrootdevice"%s"or%s,
retryingin1second.",root_device_name,kdevname(ROOT_DEV));
-printk("Pleaseappendacorrect"root="bootoption");
-panic("VFS:Unabletomountrootfson%s",
-kdevname(ROOT_DEV));
+printk("Youmayneedtoappendacorrect"root="bootoption");
+printk("orwaitfortherootdevicetobecomeready.");
+
+/*wait1secondandtryagain,
+*allowingtimeforhubs/devicestobecomeready*/
+set_current_state(TASK_INTERRUPTIBLE);
+schedule_timeout(HZ);
+gotoretry;
}
panic("VFS:Unabletomountrootfson%s",kdevname(ROOT_DEV));
out:
……
按照需要重新编译内核。
您也可以在启动内核时加载initrd.img文件到内存中,等待3秒使优盘完成初始化工作,再执行/sbin/init指令。
1、建立initrd.img文件
#mkdir-p/mnt/initrd
#cd/tmp
#mkinitrd/tmp/initrd.gz2.4.20-usb
2、解压initrd.img文件,修改启动脚本linuxrc
#gunzipinitrd.gz
#mount-oloop/tmp/initrd/mnt/initrd
#cp/sbin/busybox/mnt/initrd/bin
#cd/mnt/initrd/bin
#ln-sbusyboxsleep
#vi/mnt/initrd/linuxrc
加入如下内容:
echo'wait3seconds.....'
/bin/sleep3
3、重新生成initrd.img文件
由于缺省建立的initrd文件比较大(为4MB),为了加快优盘的启动,必须减小它。具体操作如下:
#mkdir-p/mnt/initrdusb
#cd/tmp
#ddif=/dev/zeroof=/tmp/initrdusbbs=1Mcount=1
#mke2fs-m0initrdusb
#mount-oloop/tmp/initrdusb/mnt/initrdusb
#cp-a/mnt/initrd/*/mnt/initrdusb
#umount/mnt/initrd
#umount/mnt/initrdusb
#cd/tmp
#gzip-9initrdusb
#cpinitrdusb.gz/boot/initrd-2.4.20-usb.img
二、建立优盘启动配置与目录结构
(/dev,/proc,/bin,/etc,/lib,/usr,/tmp,/var)
1、将优盘分成两个分区
留给Linux分区容量大小完全取决于安装哪些系统维护工具,结果如下:
#fdisk-l/dev/sda
Disk/dev/sda:16heads,63sectors,126cylinders
Units=cylindersof1008*512bytes
DeviceBootStartEndBlocksIdSystem
/dev/sda1110251376+6FAT16
/dev/sda21031261209683Linux
注意:如果需要使用优盘引导Windows98,扇区大小必须设置为63个扇区,可以通过fdisk的x命令扩展修改heads、sectors和cylinders参数。最好还是利用U盘相应工具建立.
2、建立与生成ext2分区
#mke2fs-m0/dev/sda2
#mkdir-p/mnt/sda2
#mount/dev/sda2/mnt/sda2
#cd/mnt/sda2
3、建立boot目录
将编译好的内核与initrd.img文件拷贝到boot目录、编译好的模块拷贝到lib/modules目录,以及将/boot/grub的文件拷贝到boot目录,编辑boot/grub/menu.lst文件,内容如下:
timeout10
color0x170x70
default0
titleWindows98
rootnoverify(hd0,0)
makeactive
chainloader+1
titleGNU/LinuxRedhat8.0(2.4.20-usb)
root(hd0,1)
kernel/boot/bzImageroroot=/dev/sda2
initrd/boot/initrd.img//如果没有initrd.img,这句就不要了
安装grub,具体操作如下:
grub>root(hd1,1)
grub>setup(hd1)
4、建立bin目录
根据自工作的需要拷贝系统维护工具,如insmod、fsck和mkdosfs等实用程序。
对于常用的工具,建议使用tinylogin
http://tinylogin.busybox.net;或者busybox
http://www.busybox.net,它们可以认您节约不省的空间.
另外,如果使用bash,还必须编辑与裁减/etc/termcap及如下文件:
/bin/bash
/etc/termcap
/usr/share/terminfo/l/linux
/usr/share/terminfo/k/klone+acs
/usr/share/terminfo/k/klone+color
/usr/share/terminfo/k/klone+sgr
5、建立devprocusrsbin目录
使用cp-a命令拷贝常用的设备文件,包括console、tty1、tty2、tty3sda、sda1、sda2、hda、hdb和hda1等设备文件。如果您的内核使用Devfs,只要建立这个目录即可.
建立procusrsbin目录,你了可以ln–sbinsbin建立sbin的连接.
6、建立lib目录
一定要注意使用ldd命令检查那些共享库文件,这些文件需要按照原来的路径拷贝到lib目录。
一般应有如下文件:
/lib:
–rwxr–xr–x1rootroot45415Nov115:39ld–2.0.7.so
lrwxrwxrwx1rootroot11Nov115:39ld–linux.so.2–>
ld–2.0.7.so
–rwxr–xr–x1rootroot731548Nov115:39libc–2.0.7.so
lrwxrwxrwx1rootroot13Nov115:39libc.so.6–>
libc–2.0.7.so
lrwxrwxrwx1rootroot17Nov115:39libcom_err.so.2–>
libcom_err.so.2.0
–rwxr–xr–x1rootroot6209Nov115:39libcom_err.so.2.0
–rwxr–xr–x1rootroot153881Nov115:39libcrypt–2.0.7.so
lrwxrwxrwx1rootroot17Nov115:39libcrypt.so.1–>
libcrypt–2.0.7.so
–rwxr–xr–x1rootroot12962Nov115:39libdl–2.0.7.so
lrwxrwxrwx1rootroot14Nov115:39libdl.so.2–>
libdl–2.0.7.so
lrwxrwxrwx1rootroot14Nov115:39libpam.so.0–>
libpam.so.0.64
–rwxr–xr–x1rootroot26906Nov115:39libpam.so.0.64
lrwxrwxrwx1rootroot19Nov115:39libpam_misc.so.0–>
libpam_misc.so.0.64
–rwxr–xr–x1rootroot7086Nov115:39libpam_misc.so.0.64
–r–xr–xr–x1rootroot35615Nov115:39libproc.so.1.2.6
lrwxrwxrwx1rootroot19Nov115:39libtermcap.so.2–>
libtermcap.so.2.0.8
–rwxr–xr–x1rootroot12041Nov115:39libtermcap.so.2.0.8
–rwxr–xr–x1rootroot12874Nov115:39libutil–2.0.7.so
lrwxrwxrwx1rootroot16Nov115:39libutil.so.1–>
libutil–2.0.7.so
drwx––x––x3rootroot1024Nov115:39modules
drwx––x––x2rootroot1024Nov115:39security
/lib/modules:
drwx––x––x4rootroot1024Nov115:392.0.35
/lib/modules/2.0.35:
drwx––x––x2rootroot1024Nov115:39block
drwx––x––x2rootroot1024Nov115:39cdrom
/lib/modules/2.0.35/block:
drwx––––––1rootroot7156Nov115:39loop.o
/lib/modules/2.0.35/cdrom:
drwx––––––1rootroot24108Nov115:39cdu31a.o
/lib/security:
–rwx––x––x1rootroot8771Nov115:39pam_permit.so
三、建立配置文件
1、编辑etc/init.d/rcS?文件名决定于etc/inittab
内容如下:
#!/bin/sh
PATH=/sbin:/bin
exportPATH
mount-n-tprocnone/proc
umount/initrd
mount-n-oremount,rw/
mount-n-oremount,rw-tprocnone/proc
ifconfiglo127.0.0.1
hostnameUsbBoot
2、编辑etc/fstab文件
内容如下:
/dev/sda2/ext2defaults11
none/procprocdefaults00
3、建立etc/inittab文件,如果用busybox生成的init这个文件可以不要。
id:2:initdefault:
si::sysinit:/etc/rcS
1:2345:respawn:/sbin/getty9600tty1
2:23:respawn:/sbin/getty9600tty2
4、建立nsswitch.conf文件
passwd:files
shadow:files
group:files
hosts:files
services:files
networks:files
protocols:files
rpc:files
ethers:files
netmasks:files
bootparams:files
automount:files
aliases:files
netgroup:files
publickey:files
5、建立/etc/pam.conf文件
OTHERauthoptional/lib/security/pam_permit.so
OTHERaccountoptional/lib/security/pam_permit.so
OTHERpasswordoptional/lib/security/pam_permit.so
OTHERsessionoptional/lib/security/pam_permit.so
6、建立passwd,group,shadow文件
最简单的方法就是复制原系统的文件再编辑。
因篇幅关系,没有对某些步骤详细说明,您可以参看下列有关文档。也可与我交流。
参考文档:
LinuxEMBEDDINGminiHOWTO
http://www.dobit.com/emblin/embhowto.htmTheLinuxBootdiskHOWTO
http://www.linux.org/docs/ldp/howto/Bootdisk-HOWTO/制作Linux的优盘启动盘:
http://www.neweasier.com/article/2003-03-14/1047604787.htmlLinux下的硬件驱动——USB设备
http://www.linuxeden.com/edu/doctext.php?docid=3039相关资源:
http://www.kernel.orghttp://www.busybox.nethttp://spblinux.sourceforge.net/
分享到:
相关推荐
Linux下U盘禁用的方法.pdf
LinuxLive USB Creator是一款可以将Linux操作系统安装到U盘、SD卡等移动设备上的U盘装linux系统工具。该软件简便,界面美观,是一款非常不错的工具。想装Linux系统的用户可以下载使用的。 LinuxLive USB Creator...
这是用u盘安装linux(redhat 5 server)的亲自测试,安装成功,
为ubuntu设计的,可以把多种发行版的linux写入u盘,用u盘启动,除了ubuntu,Xubuntu,Kubuntu等,还有比如fedora,CentOS,Puppy,YLMF OS等。可以选择是否格式化u盘。
U盘linux读取工具U盘linux读取工具U盘linux读取工具U盘linux读取工具U盘linux读取工具U盘linux读取工具
U盘装RedHat linux系统图文教程,不用刻光盘了,就U盘装系统。简单。
Linux读取U盘或者移动硬盘序列号并获取U盘或者移动硬盘分区名。基本原理如下: 当有外置 USB 插入的时候,会产生 /proc/scsi/usb-storage 目录,并在其中产生数字文件(形如 1 2 3 4),此文件存储了设备相关信息。 ...
该文档描述了如何在U盘上制作LINUX系统,相当于是做一个LINUX的启动盘。
自己写u盘linux操作系统,这个文档是本人用一个星期,辛苦研究出来了,因为这个u盘网上介绍实在太少,都很模糊,我就辛苦的用今天的下午把它整理出来,希望能够给学linux的朋友一个指导,这里面的内容都是个人总结。...
U盘安装Linux详细步骤,本人亲自测试多次均成功,适用于真机安装Linux系统。
嵌入式Linux_USB_U盘自动检测识别配置脚本,们在程序开发时,有时需要热拔插U盘,然后mount 这个U盘。Linux 2.6以上版本udev 规则提供了自动识别的机制。
Linux下 U盘插入检测,适用于嵌入式
根据网上了解,可以通过udev来实现U盘的自动识别和挂载,操作方法如下: 1. 在/etc/udev/rules目录下新建11-add-usb.rules和11-add-remove.rules,负责设备监测。 root@am335x-evm:/etc/udev/rules.d# vi 11-...
你可以用它来启动电脑,更有意思的是,你可以在运行Windows的电脑上直接使用此U盘来运行Linux,而无需安装其它任何软件!这就是Linux Live USB Creator,一个开源软件的奇妙之处!而且它界面漂亮,使用简单,只需...
手把手教你把linux系统装在u盘上,方便我们外出带着linux系统
U盘安装linux系统
U盘安装Linux系统 U盘安装Linux系统 1 1.准备工作 1 2.U盘操作步骤 1 第一步,使用unetbootin向U盘写入Linux系统ISO镜像 1 第二步,使用BOOTICE设置U盘引导 3 3.设置主板BIOS启动项 6 4.异常处理 6 5.进入...
U盘引导安装Linux系统图解,学会使用U盘安装linux
Linux加载u盘 Linux加载u盘 Linux加载u盘 Linux加载u盘
怎样在Linux下打开U盘