Chinaunix首页 | 论坛 | 博客
  • 博客访问: 285204
  • 博文数量: 65
  • 博客积分: 3091
  • 博客等级: 中校
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2005-01-25 09:44
文章存档

2013年(2)

2012年(11)

2011年(12)

2010年(13)

2009年(15)

2008年(12)

分类: LINUX

2011-09-16 19:18:43

实验题目: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) |
给主人留下些什么吧!~~