九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 5101|回复: 3

在ubuntu下烧写映像文件到SD卡--基于x210开发板

[复制链接]
发表于 2012-6-6 11:53:53 | 显示全部楼层 |阅读模式
//************************************************************//
// 在ubuntu下烧写映像文件到SD卡--基于x210开发板

第一步:安装编译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目录全放在一个目录下,如下:
lqm@lqm:~/s5pv210$ ls
android  kernel  uboot  uboot_20111124.tgz
lqm@lqm:~/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/
make
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/binPATH
export PATH=/home/lqm/s5pv210/android/out/host/linux-x86/binPATH
第一行为交叉编译工具的声明,第二行为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",执行过程如下:
注意,x210ii开发板,需执行指令fdisk -c 1
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/sdb1"
− # "mkfs.ext4 -j /dev/sdb2"
− # "mkfs.ext4 -j /dev/sdb3"
− # "mkfs.ext4 -j /dev/sdb4"
再在开发板上支持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,则提示如下信息:
root@lqm:/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"
− "fastboot erase userdata"
− "fastboot erase cache"

烧录完毕,重启开发板,则进入了android文件系统。

回复

使用道具 举报

发表于 2012-6-30 00:32:17 | 显示全部楼层
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/sdb1"
− # "mkfs.ext4 -j /dev/sdb2"
− # "mkfs.ext4 -j /dev/sdb3"
− # "mkfs.ext4 -j /dev/sdb4"
再在开发板上支持uboot,执行fastboot即可。

我按上面的步骤执行,再把放到板子上,还是同样的问题,在网上也没找到解决方法,不知其他人遇到这个问题没有。
回复 支持 反对

使用道具 举报

发表于 2012-6-30 00:32:50 | 显示全部楼层
x210 # fastboot                                                                 
mmc/sd device's initialization is failed.                                       
Error: No MBR is found at SD/MMC.                                               
Hint: use fdisk command to make partitions.                                    
x210 # fdisk -c 1                                                               
fdisk is completed                                                              
                                                                                
partion #    size(MB)     block start #    block count    partition_Id         
   1          3198          1164856         6550424          0x0C               
   2           103            22692          211792          0x83               
   3           350           234484          718580          0x83               
   4           103           953064          211792          0x83               
回复 支持 反对

使用道具 举报

发表于 2012-7-6 13:55:14 | 显示全部楼层
希望整理个手册出来,这个比较繁琐。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-10-13 03:45 , Processed in 0.022784 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表