| 第一步:安装编译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 
 SetUse 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/ 
 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)  
 另外开启一个调试终端,输入如下指令: 
 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" 
 烧录完毕,重启开发板,则进入了android文件系统。 
 |