J5 Android5.x平台添加导航分区

涉及到代码:
u-boot\disk\part_fastboot.c
u-boot\drivers\usb\gadget\f_fastboot.c
mydroid\device\ti\jacinto6evm\fastboot.sh
mydroid\device\ti\jacinto6evm\fstab.jacinto6evmboard
mydroid\bootable\recovery\recovery.cpp
mydroid\bootable\recovery\etc\init.rc
mydroid\external\sepolicy\file_contexts
/system/Makefile
mydroid\device\ti\jacinto6evm\fastboot_mapparttion.sh
目前系统中的分区使用情况如下:
u-boot\disk\part_fastboot.c
static struct partition_emmc partitions[] = {
    { "-", 128 },    /* Master Boot Record and GUID Partition Table */
    { "xloader", 128 },    /* First stage bootloader */
    { "bootloader", 384 },    /* Second stage bootloader */
    { "environment", 128 },
    { "misc", 128 },        /* Rserved for internal purpose */
    { "-", 384 },            /* Reserved */
    { "efs", 16384 },
    { "crypto", 16 },
    { "recovery", 10*1024 },    /* Recovery partition  */
    { "boot", 10*1024 },    /* Partition contains kernel + ramdisk images */
    { "system", 1024*1024 },        /* Android file system */
    { "cache", 256*1024 },        /* Store Application Cache */
    { "ipu1", 1024 },
    { "ipu2", 1024 },
    { "userdata", 0 },    /* User data */
    { NULL, 0 },
};
剩下的userdata分区大小为11G,我们的导航分区需要至少8G,剩下userdata的大小将是3G,要保证在fastboot和SD卡recovery升级时第一次下载的时候对导航分区格式化,格式化好或者系统已经有导航分区的情况下不进行格式化。

1、fastboot下载时添加导航地图分区
涉及文件修改如下:
1.1 Uboot:
u-boot\disk\part_fastboot.c
static struct partition_emmc partitions[] = {
    { "-", 128 },    /* Master Boot Record and GUID Partition Table */
    { "xloader", 128 },    /* First stage bootloader */
    { "bootloader", 384 },    /* Second stage bootloader */
    { "environment", 128 },
    { "misc", 128 },        /* Rserved for internal purpose */
    { "-", 384 },            /* Reserved */
    { "efs", 16384 },
    { "crypto", 16 },
    { "recovery", 10*1024 },    /* Recovery partition  */
    { "boot", 10*1024 },    /* Partition contains kernel + ramdisk images */
    { "system", 1024*1024 },        /* Android file system */
    { "cache", 256*1024 },        /* Store Application Cache */
    { "ipu1", 1024 },
    { "ipu2", 1024 },
    //{ "map",(8*1024*1024+304*1024)}, /* map */
    { "map",(8*1024*1024+304*1024)}, /* map */
    { "userdata", 0 },    /* User data */

    { NULL, 0 },};
u-boot\drivers\usb\gadget\f_fastboot.c

static void cb_getvar(struct usb_ep *ep, struct usb_request *req)
{
    ……………………
    #ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
    }else if (!strcmp_l1("map_size", cmd)) {  //MAP pattion
        fb_mmc_get_ptn_size("map", response);
    }

    else if (!strcmp_l1("userdata_size", cmd)) {
        fb_mmc_get_ptn_size("userdata", response);
#endif
    } else {
        error("unknown variable: %s\n", cmd);
        strcpy(response, "FAILVariable not implemented");
    }
    fastboot_tx_write_str(response);
}
1.2 下载并格式化系统分区的脚本部分
拷贝mydroid\device\ti\jacinto6evm\ fastboot.sh文件命名成
mydroid\device\ti\jacinto6evm\ fastboot_mapparttion.sh
在这个脚本中添加对map分区的格式操作,在EMMC中没map分区的情况下使用这个脚本进行fastboot的下载,如果系统启动已经有map分区和带map分区的分区表,那么使用一般的fastboot.sh脚本下载,就能够保证map分区分好之后,以后下载不对map分区格式化。
mydroid\device\ti\jacinto6evm\fastboot_mapparttion.sh添加脚本如下:
echo "do format map parttion"
resizefail_1=0
mapsize=`./fastboot getvar map_size 2>&1 | grep "map_size" | awk '{print$2}'`
if [ -n "$mapsize" ]; then
    while [ 1 ];do
        echo Current map partition size=${mapsize} KB
/*使用userdata.img作为制作map.img的原始文件,首先先将userdate.img制作成可以loop 挂载的map.img,将map.img挂载到map目录下,删除所有文件,然后重新打包成map.img,之后进行下载*/
        mkdir ./map
        ./simg2img userdata.img map.img.raw 
        mount -o loop -o grpid -t ext4 ./map.img.raw ./map || resizefail_1=1
        if [ $resizefail_1 -eq 1 ]; then
            echo "Mount failed" && break
        fi
        rm -rf ./map/*                    ---------将目录清空
        rm –rf  ./map/.*
            /*以下是将map.img写入,创建分区为ext4文件系统格式*/
        echo Current Userdata.img based on the empty map.img file
        ./make_ext4fs -s -l ${mapsize}K -a map map.img map/
        sync
        umount map
        sync
        rm -rf ./map
        rm map.img.raw
        break
    done
else
    resizefail_1=1
fi

if [ $resizefail_1 -eq 1 ]; then
    echo "userdata resize failed."
    echo "Eg: sudo ./fastboot.sh"
    echo "For now, we are defaulting to original userdata.img"
    cp $userdataimg_orig $userdataimg
fi
${FASTBOOT} flash map map.img   ---------下载制作好的空的map.img
map_size由fastboot_mapparttion.sh脚本传到 uboot中的
u-boot\drivers\usb\gadget\f_fastboot.c文件中的
}else if (!strcmp_l1("map_size", cmd)) {  //MAP pattion
        fb_mmc_get_ptn_size("map", response);

这里将之前分区表中map分区的大小返回给fastboot脚本,根据分区的大小制作map.img。
这样就可以实现添加分区的目的。
 1.3 最后添加系统启动时mount的分区
1.3.1修改mydroid\bootable\recovery\etc\init.rc
添加系统启动时map分区mount的目录
mkdir /sdcard
    mkdir /system
    mkdir /data
    mkdir /cache
    mkdir /map
    mkdir /sideload
1.3.2修改mydroid\device\ti\jacinto6evm\fstab.jacinto6evmboard
/dev/block/mmcblk0p9     /system    ext4    ro       wait
/dev/block/mmcblk0p10 /cache    ext4    noatime,nosuid,nodev    wait,check
#/dev/block/mmcblk0p13 /data    ext4    noatime,nosuid,nodev    wait,check
#/dev/block/mmcblk0p14 /map    ext4    noatime,nosuid,nodev    wait,check
/dev/block/mmcblk0p13 /map    ext4    noatime,nosuid,nodev    wait,check

/dev/block/mmcblk0p14 /data    ext4    noatime,nosuid,nodev    wait,check
/dev/block/mmcblk0p1        /xloader    emmc    defaults        defaults
/dev/block/mmcblk0p2        /bootloader    emmc    defaults        defaults
1.4 修改编译时文件拷贝部分
修改/system/Makefile 中的
emmc_install:标签部分
cp -v ${MYDROID}/out/target/product/jacinto6evm/*img $(EXEC_DIR)
cp -v ${MYDROID}/device/ti/jacinto6evm/fastboot.sh $(EXEC_DIR)
cp -v ${MYDROID}/device/ti/jacinto6evm/fastboot_mapparttion.sh $(EXEC_DIR)

1.5使用是注意事项
   在机器中没有map分区表的情况下,先用sudo ./upgrade.sh uboot 命令更新分区表。
  当看到串口打印有:
new partition table:
     256      128K xloader
     512      384K bootloader
    1280      128K environment
    1536      128K misc
    2560       16M efs
   35328       16K crypto
   35360       10M recovery
   55840       10M boot
   76320     1024M system
 2173472      256M cache
 2697760     1024K ipu1
 2699808     1024K ipu2
8993312     8496M map
 2701856     3072M userdata
时候表示分区表已经更新成功。
然后使用sudo ./ fastboot_mapparttion.sh 下载即可。
如果更新分区表时总是没更新成功,那边请删除
mydroid/out/target/product/jacinto6evm /目录下的MLO和u-boot.img文件,返回代码目录,执行:
Make uboot_clean
Make uboot && make uboot_install
等下载完成后开机启动,进入系统使用:
#df命令查看是否分区成功。
如果成功,系统将显示:
/map                    7.9G    44.0M    7.9G   4096
表示已经OK.
1.6 上层APP使用
   上层HMI或APP工程师在使用的时候会存在权限问题,可以在init.rc中添加
   mkdir /map/data 0666 system system
创建相应的目录,也可以执行软连接到其它目录中。根据自己的需求添加即可。
这样修改之后,上层APP就可以直接访问 /map/data目录了。

2、SD卡recovery升级时添加map分区
   新添加的分区必须保证EMMC上没MAP分区时,并且没有mount成功时能够格式化,而有MAP分区并且mounted成功时不进行格式化。
涉及到修改文件如下:
2.1 Uboot:
u-boot\disk\part_fastboot.c
static struct partition_emmc partitions[] = {
    { "-", 128 },    /* Master Boot Record and GUID Partition Table */
    { "xloader", 128 },    /* First stage bootloader */
    { "bootloader", 384 },    /* Second stage bootloader */
    { "environment", 128 },
    { "misc", 128 },        /* Rserved for internal purpose */
    { "-", 384 },            /* Reserved */
    { "efs", 16384 },
    { "crypto", 16 },
    { "recovery", 10*1024 },    /* Recovery partition  */
    { "boot", 10*1024 },    /* Partition contains kernel + ramdisk images */
    { "system", 1024*1024 },        /* Android file system */
    { "cache", 256*1024 },        /* Store Application Cache */
    { "ipu1", 1024 },
    { "ipu2", 1024 },
    //{ "map",(16*1024*1024+304*1024)}, /* map */
         { "map",(8*1024*1024+304*1024)}, /* map */
    { "userdata", 0 },    /* User data */
    { NULL, 0 },};

2.2 Android部分:
2.2.1 fstab修改
mydroid\device\ti\jacinto6evm\fstab.jacinto6evmboard
/dev/block/mmcblk0p9     /system    ext4    ro       wait
/dev/block/mmcblk0p10 /cache    ext4    noatime,nosuid,nodev    wait,check
#/dev/block/mmcblk0p13 /data    ext4    noatime,nosuid,nodev    wait,check
#/dev/block/mmcblk0p14 /map    ext4    noatime,nosuid,nodev    wait,check
/dev/block/mmcblk0p13 /map    ext4    noatime,nosuid,nodev    wait,check
/dev/block/mmcblk0p14 /data    ext4    noatime,nosuid,nodev    wait,check

/dev/block/mmcblk0p1        /xloader    emmc    defaults        defaults
/dev/block/mmcblk0p2        /bootloader    emmc    defaults        defaults
2.2.2 添加系统安全权限
添加map分区在格式化时的sexlinux权限,否则格式化将不成功,如下:
mydroid\external\sepolicy\file_contexts
#############################
# Vendor files
#
/vendor(/.*)?        u:object_r:system_file:s0
/vendor/bin/gpsd    u:object_r:gpsd_exec:s0
#############################
# map files
#
/map(/.*)?        u:object_r:system_data_file:s0

#############################
# Data files
#
/data(/.*)?        u:object_r:system_data_file:s0
2.2.3 Recovery部分
mydroid\bootable\recovery\recovery.cpp
添加map分区mounted是否成功,如果成功说明EMMC中已经有之前分好的map分区,不进行格式化。没有这个分区,将根据分区表进行map分区格式化。如下:
if ((reason != NULL) && ((strcmp(reason, "recovery_sd")==0) || (strcmp(reason, "wipe")==0) || (strcmp(reason, "factory")==0))) {
        printf("Wipe cache and data...\n");
        erase_volume("/cache");
        erase_volume("/data");
        //add Map partition OK
     if(ensure_path_mounted("/map")!=0)
         erase_volume("/map");

    }
在系统使用recovery系统的时候在init.rc中添加/map目录,如下:
mydroid\bootable\recovery\etc\init.rc
mkdir /sdcard
    mkdir /system
    mkdir /data
    mkdir /cache
    mkdir /map
    mkdir /sideload
之后编译整个系统,制作SD升级卡之后就可以使用SD卡升级了。制作sd升级卡命令如下:
sudo ${YOUR_PATH}/bin/mksdboot.sh --device /dev/sdb --sdk ${YOUR_PATH}  --type sd_recovery
最后将制作好的SD卡插入机器,使用SD卡启动即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值