|  | 
 
| 第一步:安装编译android系统必要的软件; 
 第二步:安装交叉编译工具链;
 
 第三步:编译uboot
 编译支持nand flash启动的uboot,执行如下指令:
 ./mk nand
 
 第四步:编译内核
 确保内核已支持yaffs文件系统;
 
 第五步:编译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
 
 修改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
 再进入映像生成目录,执行如下指令烧录uboot:
 − "fastboot flash bootloader u-boot.bin"
 
 第八步:将启动模式切换回从nand flash启动,即CFG4[6:1]=00001X,再重启开发板,这时uboot从nand flash启动了,再
 执行fastboot命令,进入fastboot烧录模式,另外开启一个终端,执行如下指令烧写其他映像文件:
 − "fastboot flash kernel zImage"
 − "fastboot flash ramdisk ramdisk-uboot.img"
 − "fastboot flash system system.img"
 到此,映像文件烧录完毕。
 注意,在烧写system.img时遇到如下错误:
 NAND write: device 0 offset 0xe00000, size 0x64ba7a4
 Input block length is not page aligned
 Data did not fit into device, due to bad blocks
 105621412 bytes written: ERROR
 flashing 'system' failed
 很明显这是页没对齐造成的,开发板使用的K9F2G08,即256M的flash,一个page=2048+64=2112Bytes,所以
 system.img的大小应为2112的整数倍。如果出现不是2112的整数倍的情况,可以稍微调节一下android系统源码,将
 out下的system.img删掉再重新编译生成。如果仍然不行,可尝试采用dd命令手动对齐。
 
 
 
 | 
 |