实验题目:U盘linux系统
实验要求:利用最新的linux内核做一个U盘linux,能够启动常见的PC机,系统内集成shell文件系统和基本TCP/IP协议栈文件系统自选,对图形界面不做要求
1制作环境
硬件环境:IBM T41 (x86兼容机) kingston SD卡
操作系统:Fedora Linux 8 (kernel version:2.6.24)
源码:linux kernel 2.5.25
Busybox 1.3.1
2基本思路
从
简单入手,在每一步的调试和分析,一步步完善直至成功闪存分为一个主分区,用ext2文件系统格式化,并选GRUB用作为bootloader由于
2.6.11版本之后的内核都支持从usb启动,所以不采用initrd,而是直接用GRUB指定根文件系统为了尽量节省存储空间,选用busybox制
作根文件系统
3制作过程
首先,熟悉linux顺利启动的各个环节,学习GRUB的安装和使用,通过最简单的系统移植熟悉linux系统的命令和操作,初步了解配置文件的编写(/etc目录下)接下来编译内核,制作根目录系统,编写配置文件最后整合系统,进行调试
3.1.编译内核
3.1.1内核配置:
解压内核文件,切换到源码目录下,采用make menuconfig进行内核配置,为简化操作编译时采用静态编译配置时必选的选项如下:
Process type:考虑到通用性,除选定Intel PM外再选上兼容x86系列;
NetWorking options: 根据题目要求酌情选择;
ATA/IDE support:现在仍有IDE硬盘,所以该项要选
SCSI support:linux把usb设备模拟成SCSI设备,所以必须选
<*>SCSI Support
<*>SCSI Disk Support
为方便在vmware上面测试,把BusLogic驱动编译进了内核
USB Support:
<*> EHCI support
<*> USB Mass Storage Suppor
<*> USB Device filesystems
NetWork Devices Support:选择Ethernet(10or100Mbit) 和Intel(R) PRO/1000 MT
Charater Devices:
<*>Virtual terminal
<*>support console on virtual terminal
<*>Standard/generitic serial support
<*>Support for console on serial port
File Systems:
<*> Second extended fs support
<*> /proc support # proc文件系统很有用
<*> ext3
<*> FAT,FAT32,NTFS
<*> NFS support
Partion types: 选择PC BIOS
Native Language Support:把codepage 437,936以及nls iso8859-1编译进内核
配置完毕,保存退出
3.1.2. 建立内核
# make mrproper
# make dep
# make clean
# make bzImage
3.2 编译busybox
3.2.1编译配置
解压内核文件,切换到源码目录下,采用make menuconfig进行配置,并采用静态编译,这样生成的命令和工具在运行时才独立于其他函数库,下面是需要编译的功能选,其他的可以根据需要自选
<*>General Configuration
<*>Show verbose applet usage messages
<*>Runtime SUID/SGID configuration via /etc/busybox.conf
<*>Build Options
<*>Build BusyBox as a static binary (no shared libs) #静态编译
<*>Installation Options
<*>Don't use /usr #避免覆盖主机系统/usr下原有的命令
配置完毕,保存退出
3.2.2 生成目标文件
#make install
编译完毕会在源码目录下目录下生成_install目录,里面有busybox和指向它的链接.
3.3制作根目录系统
在主机上建立根文件目录/mnt/rootfs
3.3.1 建立文件夹
#mkdir root dev etc var tmp proc usr
3.3.2 拷贝busybox 生成的文件
#cp -dpR /busybox_1.31/_install/* /mnt/rootfs/
3.3.3 建立设备文件
# cd /etc
# mknod tty c 5 0
# mknod console c 5 1
# chmod 666 tty console
# mknod tty0 c 4 0
# chmod 666 tty0
由于文件较多,不一一写上
3.3.4建立etc目录下的配置文件
这部分很关键,参照busybox源码目录下的install文件编写下面的配置文件:
inittab,profile,passwd,shadow,fstab,hosts,hostname,group文件
4处理U盘
4.1分区格式化
首先使用查看U盘对应的设备名称,然后分区格式化:
# fdisk l
# fdisk /dev/sdx (x表示第指第x个存储设备)
Command (m for help):d 删除原有分区
Command (m for help):n 添加分区
p linux主分区
e Linux 扩展分区
:p
Command (m for help):w
# mkfs.ext2 /dev/sdx1 将U盘上的第一分区格式化为Ext2文件系统
4.2安装grub到u盘
#mount /dev/sdx1 /mnt/usb (用fdisk -l命令查看x具体代表什么)
#cd /mnt/usb
#mkdir boot/grub
#cp /boot/grub/{stage1,stage2 e2fs1_5} boot/grub/
编辑grub.conf
#vi boot/grub/grub.conf
default=0
timeout=10
title UsbLinux
root(hd0,0)
kernel /boot/bzImage rw root=/dev/sda1 rootdelay=5
保存退出
#umount /mnt/usb
#grub
GNU GRUB version 0.95 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the
Possible completions of a device/filename.]
grub>root (hdx,0) (用fdisk -l命令查看x具体代表什么)
grub>setup (hd1,0)
... succeeded
Done
grub>quit
用U盘启动看一下,检查GRUB是否正常启动
5整合启动盘及调试
从/mnt/rootfs/下copy文件至U盘根目录下,并把编译好的内核bzImage放至U盘/boot/下,并做检查重启在BIOS设置为USB-HDD优先启动,观察是否能正常启动,并依据提示信息调试直至成功
写在后面:
1。遇到的问题及解决办法
VFS:Cannont open root device /dev/root
Kernel panic : VFS Unable to mount rootfs
编译配置不正确,进一步调整如3.3.1所示即可
2。进一步完善的方向:
由于flash读写寿命较短,为延长寿命可采用可采用jffs2文件系统或制作ramdisk。
阅读(1064) | 评论(0) | 转发(2) |