现在,越来越多的设备上采用Linux操作系统,比如防火墙,路由器等网络设备。
我最近做了一个软件编码器,是运行在Linux操作系统下的,准确的说是运行在Ubuntu下面的。
我希望能把软件编码器和操作系统一起做成一个image来发布,用户获取到这个image后,直接用dd命令或者其他工具把image烧写到usb或者dom电子盘上,然后把dom电子盘或者u盘插入到目标机器直接启动,这个机器就变成了一个编码器。
现在在参照image-creator的源代码,image-creator是meego的开发工具,首先阅读源代码根目录下的API文档。
文中提到了dm-snapshot,经过一番查找,应该是dm-crypto的那个dm,参见Linux内核源代码的Documentation/device-mapper文档。
如下命令需要了解
losetup
set up and control loop devices
kpartx
Create device maps from partition tables
parted
parted is a disk partitioning and partition resizing program. It allows you to create, destroy, resize, move and copy ext2, Linux-swap, FAT, FAT32, and reiserfs partitions. It can create, resize, and move Macintosh HFS partitions, as well as detect jfs, ntfs, ufs, and xfs partitions. It is useful for creating space for new operating systems, reorganising disk usage, and copying data to new hard disks.
采用extLinux作为bootload,只启动内核的image做法如下:
1. image文件:
dd if=/dev/zero of=rainbow.img bs=1M count=128
2. 把image文件与loop设备关联
losetup /dev/loop0 rainbow.img
3. 现在/dev/loop0就是你的U盘或者dom电子盘设备了,进行分区等操作
fdisk /dev/loop0
建立一个分区,设置为启动分区,
4. 无论是U盘还是电子盘,在上面建立的分区都有一个对用的设备,比如/dev/sdc1等,我们刚刚在image上建立的分区在哪里?这就要用到kpartx了
kpartx -a -v /dev/loop0
相应的分区在/dev/mapper中
5. 把image上的分区mount上来:
mount /dev/mapper/loop0p1 mountpoint
6. 建立一个boot目录并安装extLinux
extLinux –install /path/to/mountpoint/boot
7. 在boot目录中编辑extLinux.conf配置文件
8. copy内核到boot目录
9. 卸载/dev/mapper/loop0p1,把mbr写到/dev/loop0
10. kpartx -d
11. losetup -d
12. 用dd把image写到目标设备。