anroid编译后pack无输出的原因

本文记录了解决全志A33开发板上Android 4.4.2系统打包问题的过程。作者最初遇到无法执行pack命令的情况,并通过安装liballegro暂时解决了问题。最终发现正确的方法是重新导入环境变量,从而成功完成打包。


       用全志A33开发板开发项目,用的android版本是4.4.2,编译完成后就以为大功告成,因为深夜了便没有进行pack工作。

       第二天,在android目录下输入pack,竟然提示无此命令,提示安装liballegro。疑问 别无他法,只要照做,apt-get install了这个软件包。鄙视

       再此输入pack,又提示:

        

       抓狂

       网上搜索一番,没有找到类似的问题,有的只是pack中间出现了某些问题。

       只好自己开动脑筋......

       重翻了一下android编译说明,注意到编译之前需要导入环境变量的,叮! 眼睛发亮了,原来如此!

       在终端中重新输入下面命令,导入环境变量,

        source build/envsetup.sh

        lunch

        再输入

        pack

        OK,成功!

        

<think>我们正在讨论的是RK3128平台Android 7.1固件的编译后打包命令。根据用户的需求和之前的引用[1],用户希望知道在编译完成后如何将编译生成的各个部分(如uboot、kernel、rootfs)打包成可用于更新的固件镜像(img文件)。在Rockchip平台,通常使用Rockchip提供的打包工具mkimage(或称为rkImageMaker)来将各个部分打包成一个完整的固件镜像。 在Android 7.1的编译环境中,Rockchip通常会提供打包脚本。以下步骤和命令基于Rockchip的标准流程: ### 一、编译环境准备 1. 确保已按照Rockchip的文档配置好Android 7.1的编译环境(如Ubuntu 16.04,JDK8等)。 2. 完成整个Android源码的编译(通过`source build/envsetup.sh`,`lunch`选择对应目标,`make -j8`等步骤)。 ### 二、编译后生成的文件 编译完成后,在`out/target/product/rk3128/`目录下会生成以下关键文件: - `boot.img`:包含kernel和ramdisk - `system.img`:Android系统镜像 - `recovery.img`:恢复镜像 - 可能还包括其他分区镜像(如`vendor.img`等) 但是,要生成Rockchip设备可以烧写的统一固件(update.img),需要将这些镜像与loader(即uboot)一起打包。 ### 三、打包生成update.img的命令 Rockchip提供了`mkupdate`工具(通常位于`RKTools/linux/Linux_Pack_Firmware/rockdev`目录下)来打包固件。以下是具体步骤: 1. **进入打包工具目录**: ```bash cd <SDK_ROOT>/RKTools/linux/Linux_Pack_Firmware/rockdev ``` 2. **准备分区镜像**: 将编译生成的镜像文件复制到对应的打包目录(如`rockdev/Image`)中。通常,打包脚本会要求特定的文件命名。例如: - `MiniLoaderAll.bin`:uboot(由uboot编译生成,通常需要从uboot目录复制) - `parameter.txt`:分区表文件 - `boot.img`:内核和ramdisk - `recovery.img` - `system.img` 注意:这些文件需要放在打包工具指定的目录下(如`rockdev/Image`)。 3. **运行打包脚本**: 使用`mkupdate.sh`脚本(或类似脚本)打包: ```bash ./mkupdate.sh ``` 或者,如果使用参数文件,可能需要指定参数文件: ```bash ./afptool -pack ./ Image update.img ./rkImageMaker -RK312A RK3128MiniLoaderAll_V2.46.bin Image update.img -os_type:androidos ``` 这里: - `afptool`:将各个分区镜像打包成中间文件(update.img的前身) - `rkImageMaker`:将loader和上面生成的中间文件合并成最终的update.img 注意:具体的命令参数可能因SDK版本而略有不同,请参考SDK中的文档。 4. **生成固件位置**: 生成的`update.img`位于当前目录(或指定的输出目录)下,此文件可用于烧写。 ### 四、自定义打包 如果用户需要自定义文件系统(如替换rootfs),则需要在打包前替换对应的镜像文件。例如,如果用户自己构建了rootfs并生成了`system.img`,则将其复制到`rockdev/Image`目录下替换原有的`system.img`,然后再运行打包命令。 ### 五、注意事项 1. **分区表文件(parameter.txt)**:必须与设备的分区布局一致,否则烧写后设备可能无法启动。 2. **Loader文件**:必须使用与设备匹配的Loader(如`RK3128MiniLoaderAll.bin`),否则可能导致设备无法被识别。 3. **文件命名**:打包工具对文件名有严格要求,需参考SDK中的说明。 ### 六、参考命令示例 假设在SDK根目录下的打包工具路径为`RKTools/linux/Linux_Pack_Firmware/rockdev`,并且已经将所需镜像文件放入`rockdev/Image`目录,则完整打包流程如下: ```bash # 进入打包目录 cd RKTools/linux/Linux_Pack_Firmware/rockdev # 清空旧文件(可选) rm -rf Image/* rm -f update.img # 复制新编译的镜像到Image目录(这里假设编译输出目录为out/target/product/rk3128/) cp ../../../out/target/product/rk3128/system.img Image/ cp ../../../out/target/product/rk3128/boot.img Image/ cp ../../../out/target/product/rk3128/recovery.img Image/ # 复制loader和parameter cp ../../../u-boot/RK3128MiniLoaderAll.bin Image/ cp parameter.txt Image/ # 确保parameter.txt正确 # 打包 ./afptool -pack ./ Image update.img.afp ./rkImageMaker -RK312A Image/RK3128MiniLoaderAll.bin update.img.afp update.img -os_type:androidos # 检查生成的update.img ls -lh update.img ``` ### 七、安全建议 1. 打包前验证各个镜像文件的正确性(如通过`file`命令或挂载检查)。 2. 首次烧写新固件前,备份原设备分区(尤其是parameter分区)。 §§相关问题§§ 1. 如何修改RK3128的分区表(parameter.txt)? 2. RK3128的uboot编译命令是什么? 3. 如何为RK3128编译Android 7.1的内核? 4. 打包过程中出现“afptool: error: file not found”错误如何解决? [^1]: 参考Rockchip官方文档《Rockchip_Android_Build_System》及SDK中的打包脚本说明。</think>在RK3128平台上编译Android 7.1后生成可烧写固件镜像的打包命令流程如下(基于Rockchip标准开发流程): ### 一、编译环境准备 ```bash # 初始化编译环境 $ source build/envsetup.sh # 选择目标设备 $ lunch rk3128-eng # 全量编译(耗时较长) $ make -j8 ``` ### 二、关键打包命令 1. **生成基础镜像文件**: ```bash # 生成boot.img(内核+ramdisk) $ mkbootfs out/target/product/rk3128/root | minigzip > ramdisk.img $ mkbootimg --kernel out/target/product/rk3128/kernel --ramdisk ramdisk.img --output boot.img # 生成system.img(系统分区) $ make_ext4fs -l 1024M -s -a system out/target/product/rk3128/system.img out/target/product/rk3128/system ``` 2. **打包完整固件**(使用Rockchip专用工具): ```bash # 进入打包工具目录 $ cd RKTools/linux/Linux_Pack_Firmware/rockdev # 复制编译产出到打包目录 $ cp ../../../out/target/product/rk3128/{boot.img,system.img} Image/ # 执行固件打包(核心命令) $ ./afptool -pack ./ Image/ update.img.afp $ ./rkImageMaker -RK312A Image/RK3128MiniLoaderAll.bin update.img.afp update.img -os_type:androidos ``` 最终生成 **update.img** 即为可烧写固件[^1] ### 三、自定义文件系统打包 若需替换根文件系统(如引用[1]所述): ```bash # 替换rootfs内容 $ sudo rm -rf Image/rootfs/* $ sudo cp -a /path/to/custom/rootfs/* Image/rootfs/ # 重新生成rootfs镜像 $ genext2fs -d Image/rootfs -b 524288 -a rootfs.img # 重新打包完整固件 $ ./afptool -pack ./ Image/ update.img.afp $ ./rkImageMaker -RK312A Image/RK3128MiniLoaderAll.bin update.img.afp update.img ``` ### 四、验证固件完整性 ```bash # 检查固件结构 $ file update.img # 应显示:Rockchip update image # 计算MD5校验值 $ md5sum update.img > update.img.md5 ``` ### 五、关键文件说明 | 文件路径 | 作用 | |---------|------| | `RKTools/linux/Linux_Pack_Firmware/` | Rockchip官方打包工具 | | `Image/parameter.txt` | 分区表定义文件 | | `Image/RK3128MiniLoaderAll.bin` | Bootloader文件 | | `out/target/product/rk3128/obj/KERNEL_OBJ/arch/arm/boot/zImage` | 内核镜像 | > **注意**:打包前需确保: > 1. `parameter.txt` 中的分区大小与实际匹配 > 2. 文件系统镜像格式为Rockchip要求的EXT4/YAFFS2 > 3. 工具链路径配置正确(检查 `prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin`)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值