制作ubuntu烧录镜像

制作ubuntu烧录镜像

象棋小子   1048272975

一个基本的linux系统由引导加载器、内核和必要的文件组成,可以选择什么被包括进来,然后去编译实现,个性化配置好的linux系统可以制作成一个烧录镜像用于发行共享。

1.  资源准备

一个linux系统需要引导加载器(boot0、uboot),linux内核,根文件系统这几个部分。boot0、uboot、linux内核的编译生成可以查看“Linux内核编译运行”这一章节,ubuntu根文件系统的构建可以查看“构建ubuntu根文件系统”这一章节。

1.1. 引导加载器

编译uboot并打包生成boot0和uboot镜像,把lichee/tools/pack/out目录中的boot0_sdcard.fex和boot_package.fex拷贝到/usr/image目录。

1.2. 内核

编译linux内核生成boot.img,把lichee/out/sun50iw2p1/linux/common目录中的boot.img拷贝到/usr/image目录。

1.3. 根文件系统

构建好的ubuntu根文件系统目录打包生成ubuntu.tar.gz,拷贝到/usr/image/rootfs目录中,并解压。

2.  脚本实现

通过mkimage.sh脚本来实现ubuntu烧录镜像的制作,主要有以下这几个过程。

a.   判断是否root权限,制作镜像需要root权限。

b.   切换到/usr/image目录,在/usr/image目录中已准备好相应的资源。

c.   整个img不会超过500M,分配500M的空间。分为boot0区域8K位置开始处,uboot区域16400K位置开始处,vfat文件系统启动区域,20M位置开始处,分配100M的空间,剩余空间380M格式化成ext4文件系统,作为根文件系统区域。

d.   把boot0、uboot、boot.img、根文件系统添加到img。

e.   img加入相应的分区表。

#!/bin/bash

 

set-e

 

if[ "$(id -u)" != "0" ]; then

       echo "Script must be run as root!"

       exit 0

fi

 

ROOT=/usr/image

cd  $ROOT

IMAGE="$ROOT/nanopi-neo2_ubuntu-base-16.04.2.img"

disk_size=500#MiB

boot0="$ROOT/boot0_sdcard.fex"

uboot="$ROOT/boot_package.fex"

 

echo  "Creating image $IMAGE of size $disk_size MiB ..."

#Partition Setup

boot0_position=8      # KiB

uboot_position=16400  # KiB

part_position=20480   # KiB

boot_size=100         # MiB

 

set-x

 

dd  if=/dev/zero bs=1M count=$((part_position/1024)) of="$IMAGE"

echo  "Add boot0 into Image"

dd  if="$boot0" conv=notrunc bs=1k seek=$boot0_positionof="$IMAGE"

echo  "Add uboot into Image"

dd  if="$uboot" conv=notrunc bs=1k seek=$uboot_positionof="$IMAGE"

 

echo  "Create boot file system (VFAT)"

dd  if=/dev/zero bs=1M count=${boot_size} of=${IMAGE}1

mkfs.vfat  -n  BOOT  ${IMAGE}1

 

echo  "Add boot.img into Image"

mcopy  -m  -i  ${IMAGE}1  ${ROOT}/boot.img ::

 

dd  if=${IMAGE}1  conv=notrunc  oflag=append  bs=1M  seek=$((part_position/1024))   of="$IMAGE"

rm  -f  ${IMAGE}1

 

echo  "Create additional ext4 file system for rootfs"

dd  if=/dev/zero bs=1M count=$((disk_size-boot_size-part_position/1024))of=${IMAGE}2

mkfs.ext4  -F  -b  4096  -E  stride=2,stripe-width=1024 -L rootfs ${IMAGE}2

 

if[ ! -d /media/tmp ]; then

       mkdir -p /media/tmp

fi

 

mount  -t ext4 ${IMAGE}2 /media/tmp

echo  "Add rootfs into Image"

cp  -rfa  $ROOT/rootfs/*  /media/tmp

 

umount  /media/tmp

 

dd  if=${IMAGE}2 conv=notrunc oflag=append bs=1Mseek=$((part_position/1024+boot_size)) of="$IMAGE"

rm -f  ${IMAGE}2

 

if[ -d /media/tmp ]; then

       rm -rf /media/tmp

fi

 

echo  "Add partition table"

cat<<EOF | fdisk "$IMAGE"

o

n

p

1

$((part_position*2))

+${boot_size}M

t

c

n

p

2

$((part_position*2+ boot_size*1024*2))

 

t

2

83

w

EOF

 

sync

clear

3.  开机启动

用Win32DiskImager工具把做好的镜像nanopi-neo2_ubuntu-base-16.04.2.img烧录进sd卡, 上电启动。

用df –h命令显示目前所有档案系统的最大可用空间及使用情形。

用mplayer播放mp3音频。

4.  附录

制作好的ubuntu烧录镜像及相应的实现脚本。

http://pan.baidu.com/s/1kUJdWMz

 

展开阅读全文

没有更多推荐了,返回首页