【转载】android2.3_v210_编译下载SD卡

来源:互联网 发布:算法设计屈婉玲答案 编辑:程序博客网 时间:2024/06/14 14:36

转载于http://www.9tripod.com/%E5%9C%A8ubuntu%E4%B8%8B%E7%83%A7%E5%86%99%E6%98%A0%E5%83%8F%E6%96%87%E4%BB%B6%E5%88%B0sd%E5%8D%A1%EF%BC%8D%EF%BC%8D%E5%9F%BA%E4%BA%8Ex210%E5%BC%80%E5%8F%91%E6%9D%BF/

第一步:安装编译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 sdn”
exit
fi

# 如果传入参数大于1,则提示错误
if [ $# -gt 1 ]; then
echo -e “33[40;32m"
echo "Usage: ./mk [mode]”
echo ” mode: nand, sd”
echo “compile: ./mk nand or ./mk sd”
echo -e “33[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 “33[40;32m"
echo "Usage: ./mk [mode]”
echo ” mode: nand, sd”
echo “compile: ./mk nand or ./mk sd”
echo -e “33[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/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=0×0 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=0×300000(~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 0×83
3 353 268380 723135 0×83
4 101 991515 208740 0×83

再将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文件系统。


补充声明:以上操作是基于64位系统,如果是32位系统还需要做如下修改:

1.修改/build/core/main.mk

 #ifneq (64, $(findstring 64, $(build_arch))) 
   ifneq(i686, $(findstring i686, $(build_arch))) 

2.修改下面4个文件

./external/clearsilver/cgi/Android.mk 
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk 
./external/clearsilver/cs/Android.mk 

注销掉其中的:

# LOCAL_CFLAGS += -m64 
# LOCAL_LDFLAGS += -m64 
 

原创粉丝点击