把每一块SD/TF卡都变为操作系统(Uboot, syslinux)

发表于2012 年 03 月 24 日 | 标签: , , , , ,

本文环境

- 系统: ubuntu 10.04.2  / tiny core
- 软件: syslinux 4.05
- 设备: SD卡,TF卡,使用u口的SD/TF卡读卡器,华硕主板

创建u盘/sd卡启动iso文件,原理很简单,两步:

  • 第一,把下载的操作系统iso文件展开,复制内容到SD卡;
  • 然后,使用syslinux作为开机引导;即可。

不过这个过程要注意一个地方,有时候即使你设置了主板bios里启动顺序,第一个为“removable”或“USB”或“USB HDD”等的,但某些板子就是不认,所以最好的处理方式是手动告诉机器,我这次要用USB启动。要设置USB启动,不管是什么板,在启动的同时,试着按ESC, F11, F8 等等功能键,看看能不能出菜单就行,总有一个键能让你调出启动优先菜单。

言归正传,前两天在sd卡上灌linux,要做一个rescue系统,于是下了一个tiny core linux, 大小才10M左右的。cool :)

下面是在sd卡上安装tiny linux的设置步骤;其实这个过程可以延伸为安装任意的live linux iso到sd卡,只要你愿意。

制作可启动的sd卡

1. 在bios 设置使用u盘启动。
华硕主板的bios的启动优先级菜单中,有一项叫removeable的,(后来证明不凑效,没关系,开机时手动调出启动设备菜单,华硕板下是ESC)

2. 制作干净的sd卡(这一点不是必须的,写下来供参考)

  • 为sd卡建分区表
    # fdisk /dev/sdb       # (我的读卡器识别为sdb)
    
    进入后,先d,然后n创建。
    默认是linux ext类型的分区格式。要调整为fat的,不退出fdisk,按t,修改systemId,fat16类型的为4,按w写入
  • 制作活动区(active)
    # fdisk /dev/sdb 
    
    进入后,选择a,然后w,最后q退出。
  • 格式化sd卡,用vfat是为了以后sd卡能在windows系统下识别;如果是大卡,不需要用fat16,我这里是32M的卡,所以指定参数-F 16
    # mkfs.vfat -F 16 /dev/sdb

我后来分别使用32M和4G的sd卡格式化为vfat 16/32进行制作,在windows下使用均没问题。

3. 到官网下载syslinux

# wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.bz2 \
-O /tmp/syslinux-4.05.tar.bz2

4. 解压syslinux,把syslinux的启动引导写入sd卡:

# cd /tmp
# tar -jxvf syslinux-4.05.tar.bz2
# cd syslinux-4.05/linux/
# ./syslinux /dev/sdb1

执行后,sd卡上挂载后的根目录应该会出现一份LDLINUX.SYS文件

5. 这枚sd卡,并非一定要刷mbr。只有用来运行windows的硬盘或sd卡才必须刷mbr。事实上,每一个分区上(例如/dev/sdb1就是一个分区)都可以有自己的引导程序,而不一定都得在/dev/sdb这样的整块硬盘上写mbr。

这一点已证明,一块干净的sd卡,没有刷mbr,可以正常使用来做uboot。

6. 至此,sd卡的启动引导已经安装完毕。
这块sd卡现在已经可以用来引导其他的系统启动了。

如果以后在这枚sd卡上跑到dos,或windows,需要mbr的话,可以使用如下命令刷mbr:

# cd /tmp/syslinux4.05/mbr/

执行下面二选一进行mbr的写入
# dd if=mbr.bin of=/dev/sdb
或
# echo mbr.bin > /dev/sdb

 

Tiny core linux的安装

• 直接复制tiny linux iso文件的内容到sd卡。先挂载该iso以及sd卡,再执行命令

# mount /dev/sdb1 /mnt/flash
# mount -o loop tiny-core.3.iso /mnt/cdrom
# cp -R /mnt/cdrom/* /mnt/flash/

• 修改复制过去的内容,把isolinux的内容都修改为syslinux的:
进入/mnt/flash,tiny core的结构如下
只有一个boot目录:
/boot/isolinux/…..
/boot/bzImage
/boot/tinycore.gz
因此,我需要作如下修改:

# cd /mnt/flash
# mv isolinux syslinux
# mv syslinux/isolinux.bin syslinux/syslinux.bin
# mv syslinux/isolinux.cfg syslinux/syslinux.cfg

• 如果syslinux.cfg中有些路径不正确,可以用编辑器打开,进入修改。

• syslinux.cfg应该放在哪里?
/boot/syslinux/syslinux.cfg
/syslinux/syslinux.cfg
/syslinux.cfg
这三个位置都可以

• 把sd卡umount,重启,按ESC调出启动设备选择菜单,选择sd卡启动,即可。

 

把每一块SD/TF卡都变为操作系统(Uboot, syslinux)』有 1 条评论

  1. Pingback 引用通告: 又一个晴天 » ubuntu12.04 升级 grub error的修复

发表评论

*

  

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif