`
dogasshole
  • 浏览: 840393 次
文章分类
社区版块
存档分类
最新评论

U盘上的LINUX

 
阅读更多
首先让我们先了解一下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等实用程序。

  对于常用的工具,建议使用tinyloginhttp://tinylogin.busybox.net;或者busyboxhttp://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文件

  最简单的方法就是复制原系统的文件再编辑。

  因篇幅关系,没有对某些步骤详细说明,您可以参看下列有关文档。也可与我交流。

参考文档:

LinuxEMBEDDINGminiHOWTOhttp://www.dobit.com/emblin/embhowto.htm

TheLinuxBootdiskHOWTOhttp://www.linux.org/docs/ldp/howto/Bootdisk-HOWTO/

制作Linux的优盘启动盘:http://www.neweasier.com/article/2003-03-14/1047604787.html

Linux下的硬件驱动——USB设备http://www.linuxeden.com/edu/doctext.php?docid=3039

相关资源:

http://www.kernel.org

http://www.busybox.net

http://spblinux.sourceforge.net/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics