天天看點

在ubuntu下燒寫映像檔案到SD卡--基于三星210開發闆

第一步:安裝編譯android系統必要的軟體; 

第二步:安裝交叉編譯工具鍊; 

第三步:編譯uboot

    uboot的配置檔案為smdkv210single.h,複制兩份,一份命名為smdkv210_nand.h,一份命名為smdkv210_sd.h,

smdkv210_nand.h中做如下修改:

//#define CFG_FASTBOOT_ONENANDBSP

#define CFG_FASTBOOT_NANDBSP

//#define CFG_FASTBOOT_SDMMCBSP

#define CONFIG_EVT1 1 

smdkv210_sd.h中做如下修改:

//#define CFG_FASTBOOT_ONENANDBSP

//#define CFG_FASTBOOT_NANDBSP

#define CFG_FASTBOOT_SDMMCBSP

#define CONFIG_EVT1 1

    makefile中做如下修改:

CROSS_COMPILE = /opt/arm-2009q3/bin/arm-none-linux-gnueabi-

smdkv210single_config : unconfig

@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110

@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/smdkc110/config.mk

smdkv210_nand_config : unconfig

@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110

@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/smdkc110/config.mk

smdkv210_sd_config : unconfig

@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110

@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/smdkc110/config.mk

    注意,smdkv210_nand_config和smdkv210_sd_config為新增的語句,用于配置nand和SD卡; 

    再制作uboot編譯腳本,命名為mk,内容如下:

#!/bin/sh

# create by liuqiming

# date: 2011-11-24

MODE=$1

CPU_NUM=$(cat /proc/cpuinfo |grep processor|wc -l)

CPU_NUM=$((CPU_NUM+1))

mkdir -p /home/lqm/share/tftpboot

# 如果沒有傳入參數,則提示錯誤

if [ -z $MODE ]; then

echo "\nERROR: Must set the compile mode"

echo "Example: $0 nand or $0 sd\n"

exit

fi

# 如果傳入參數大于1,則提示錯誤

if [ $# -gt 1 ]; then

echo -e "\033[40;32m"

echo "Usage: ./mk [mode]"

echo "       mode:    nand, sd"

echo "compile: ./mk nand or ./mk sd"

echo -e "\033[40;37m" 

fi

if [ $MODE = "nand" ]; then

make distclean

make smdkv210_nand_config

make -j${CPU_NUM}

mv u-boot.bin uboot_nand.bin

cp uboot_nand.bin /home/lqm/share/tftpboot/uboot.bin

echo "^_^ uboot_nand.bin is finished successful!"

exit

elif [ $MODE = "sd" ]; then

make distclean

make smdkv210_sd_config

make -j${CPU_NUM}

mv u-boot.bin uboot_sd.bin

cp uboot_sd.bin /home/lqm/share/tftpboot/uboot.bin

echo "^_^ uboot_sd.bin is finished successful!"

exit

else

echo -e "\033[40;32m"

echo "Usage: ./mk [mode]"

echo "       mode:    nand, sd"

echo "compile: ./mk nand or ./mk sd"

echo -e "\033[40;37m" 

exit

fi

    再執行mk腳本編譯SD卡啟動的uboot:

./mk sd

第四步:編譯核心

make smdkv210_android_defconfig

make menuconfig

配置檔案系統以支援SD卡檔案系統:

Check Ext4 filesystem on menuconfig.

File systems

Set <*> The Extended 4 (ext4) filesystem

Set [*] Use ext4 for ext2/ext3 file systems

Save & Exit

修改makefile檔案:

ARCH ?= arm

CROSS_COMPILE ?= /opt/arm-2009q3/bin/arm-none-linux-gnueabi-

再make,在arch/arm/boot目錄将生成核心映像檔案zImage。

第五步:編譯android檔案系統

将android編譯腳本build_android.sh重命名為mk,并做如下修改:

KERNEL_DIR=../kernel

SEC_PRODUCT='smdkv210'

注意,由于我将uboot,kernel,android目錄全放在一個目錄下,如下:

[email protected]:~/s5pv210$ ls

android  kernel  uboot  uboot_20111124.tgz

[email protected]:~/s5pv210$

android編譯腳本mk在android目錄,故核心目錄為../kernel。

修改device/samsung/smdkv210/BoardConfig.mk檔案:

# BOARD_SDMMC_BSP := false

# modified for sdcard image.

BOARD_SDMMC_BSP := true

# BOARD_USERDATAIMAGE_PARTITION_SIZE := 1073741824

# modified for sdcard image. 

BOARD_USERDATAIMAGE_PARTITION_SIZE := 370147328

修改system/extras/ext4_utils/mkuserimg.sh檔案:

# make_ext4fs -s -l $SIZE -a $MOUNT_POINT $OUTPUT_FILE $SRC_DIR

# modified for sdcard image.

make_ext4fs -l $SIZE -a $MOUNT_POINT $OUTPUT_FILE $SRC

執行mk腳本編譯:

./mk

編譯完成後,在android/out/target/product/smdkv210目錄将會生成ramdisk-uboot.img,

system.img,zImage,userdata.img等映像檔案。

第六步:燒寫uboot映像檔案到SD卡

将SD卡放到讀卡器上,再将讀卡器插到運作linux系統的PC機上,初次使用SD卡時,需将SD卡的分區全部

删掉,執行如下指令:

sudo fdisk /dev/sdb

注意,多數情況下SD卡的盤符為sdb,少數情況下會出現sdc,sde等盤符,具體需使用cat /proc/partition

指令查詢。

再輸入d,回車,如果存在多個盤符,按照提示逐個删掉,删完後按w儲存,再重插讀卡器,使用ls /dev/sd*

指令查詢,這時sdb應該隻存在一個,沒有多餘的分區了。

進入sd_fusing目錄并執行腳本燒錄SD卡映像:

cd uboot/sd_fusing/

sudo bash ./sd_fusing.sh /dev/sdb

這時,uboot就燒到SD卡中了。

注意,腳本檔案sd_fusing.sh做了如下修改:

echo "BL1 fusing"

./mkbl1 ../uboot_sd.bin SD-bl1-8k.bin 8192 #分離出SD-bl1-8k.bin

dd iflag=dsync oflag=dsync if=SD-bl1-8k.bin of=$1 seek=$bl1_position #将SD-bl1-8k.bin寫入SD卡

rm SD-bl1-8k.bin #删除SD-bl1-8k.bin

####################################

#<u-boot fusing>

echo "u-boot fusing"

dd iflag=dsync oflag=dsync if=../uboot_sd.bin of=$1 seek=$uboot_position #将uboot.bin寫入SD卡

隻是将原來的u-boot.bin修改為了uboot_sd.bin了,因為uboot編譯腳本mk中也做了相應的修改。

第七步:使用fastboot燒寫映像檔案到SD卡

linux下的fastboot為android源碼包編譯出來,具體路徑為android/out/host/linux-x86/bin目錄。是以,首先

需修改ubuntu環境變量腳本:

vim /etc/bash.bashrc

加入如下語句:

export PATH=/opt/arm-2009q3/bin:$PATH

export PATH=/home/lqm/s5pv210/android/out/host/linux-x86/bin:$PATH

第一行為交叉編譯工具的聲明,第二行為fastboot指令的聲明。

再調節撥碼開關CFG4[6:1]=00110X,将SD卡插到開發闆的slot0,啟動開發闆,bootloader就啟動了。

在三秒倒計時内按下空格鍵,進入指令行控制欄,輸入fastboot,回車,這時液晶屏上會有藍色顯示,提示已進入fastboot狀态,列印

資訊如下:

checking mode for fastboot ...

Hit any key to stop autoboot:  0 

SMDKV210 # fastboot

[Partition table on MoviNAND]

ptn 0 name='bootloader' start=0x0 len=N/A (use hard-coded info. (cmd: movi))

ptn 1 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi))

ptn 2 name='ramdisk' start=N/A len=0x300000(~3072KB) (use hard-coded info. (cmd: movi))

ptn 3 name='system' start=0xB14800 len=0x79E1800(~124806KB) 

ptn 4 name='userdata' start=0x84F6000 len=0x15EDE800(~359290KB) 

ptn 5 name='cache' start=0x1E3D4800 len=0x676A000(~105896KB) 

ptn 6 name='fat' start=0x24B3E800 len=0xC6BFB800(~3256302KB) 

如果提示如下錯誤:

Error: No MBR is found at SD/MMC.                                              

Hint: use fdisk command to make partitions.

則先執行指令"fdisk -c 0",執行過程如下:

SMDKV210 # fdisk -c 0                                                          

fdisk is completed                                                             

partion #    size(MB)     block start #    block count    partition_Id         

   1          3126          1200255         6403845          0x0C              

   2           120            22365          246015          0x83              

   3           353           268380          723135          0x83              

   4           101           991515          208740          0x83 

再将SD卡從開發闆上取出,通過讀卡器放到PC機上格式化分區:

− # mkfs.vfat /dev/sdb0

− # mkfs.ext4 -j /dev/sdb1

− # mkfs.ext4 -j /dev/sdb2

− # mkfs.ext4 -j /dev/sdb3

再在開發闆上支援uboot,執行fastboot即可。

另外開啟一個調試終端,輸入如下指令:

fastboot devices

如在普通使用者下執行,則提示如下資訊:

no permissions fastboot

如執行fastboot flash kernel zImage指令,則提示< waiting for device >,

如執行sudo fastboot devices則提示sudo: fastboot: command not found,必須執行如下指令:

sudo su

進入root使用者模式,再執行fastboot devices,則提示如下資訊:

[email protected]:/home/lqm/s5pv210/android/out/target/product/smdkv210# fastboot devices

SMDKC110-01 fastboot

再進入映像生成目錄,依次執行如下指令燒錄映像:

− "fastboot flash bootloader u-boot.bin"

− "fastboot flash kernel zImage"

− "fastboot flash ramdisk ramdisk-uboot.img"

− "fastboot flash system system.img"

燒錄完畢,重新開機開發闆,則進入了android檔案系統。