天天看點

制作ubuntu燒錄鏡像制作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目錄中,并解壓。

制作ubuntu燒錄鏡像制作ubuntu燒錄鏡像

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指令顯示目前所有檔案系統的最大可用空間及使用情形。

制作ubuntu燒錄鏡像制作ubuntu燒錄鏡像

用mplayer播放mp3音頻。

制作ubuntu燒錄鏡像制作ubuntu燒錄鏡像

4.  附錄

制作好的ubuntu燒錄鏡像及相應的實作腳本。

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

繼續閱讀