完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、软件要求:编译环境初始化
1、Ubuntu 16.04 软件包安装 sudo apt-get install git gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools parted libudev-dev libu***-1.0-0-dev python-linaro-image-tools linaro-image-tools libssl-dev autotools-dev libsigsegv2 m4 libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libglib2.0-dev openssh-client lib32stdc++6 2、安装 ARM 交叉编译工具链和编译内核相关软件包 sudo apt-get install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev libssl1.0.0 libssl-dev 二、下载LINUX-SDK 下载源码包 1、下载repo工具 mkdir linuxcd linuxgit clone 2、下载SDK 下载之后在上面建立的linux目录下解压 解压方法 sudo apt-get install p7zip sudo p7zip -d linux-sdk-3288.7z 3、同步源码 什么是repo? Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个Git项目组成,如果我们分别使用Ubuntu Git命令来逐个获取显得非常麻烦,所以Android项目组编写了一个名为Repo的Python脚本来统一管理这些项目仓库,使得项目的获取更加简单。 首先安装repo,然后通过源码 在linux_sdk/目录运行ls -a命令,有.repo/目录,在这个repo目录下 sudo apt-get install repo repo sync -c 注意:repo sync -c必须在root用户下执行,否则会报错。整个更新过程非常缓慢,中断失败后也要多次执行repo sync -c指令,直到更新成功为止。 三、编译SDK 1、编译前配置 device的路径如图所示 (2)本文例子:确定选用rk3288/firefly-rk3288.mk firefly-rk3288.mk 相关配置介绍: 其中roof image path 默认配置如下所示: 2、配置板型 根据各个板型和配件的差别,内核中使用的DTS也有差别,如果是标配板型,跳过此步,如果板型有VGA或者LCD等支持,需要在.BoardConfig.mk中做对应的修改。 3、编译配置文件 ./build.sh firefly-rk3288.mk 运行完上述脚本后,在device/rockchip/目录下,生成.BoardConfig.mk 软链接 device/rockchip/rk3288/firefly-rk3288.mk 注意:如果出现执行 ./build.sh 时,No such file or directory,出现报错的情况,系统可能缺少32位的支持库,安装以下方式安装32位支持库: sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386 注意.build.sh的位置 运行完上述脚本后,在device/rockchip/目录下,生成.BoardConfig.mk 软链接 device/rockchip/rk3288/firefly-rk3288.mk 4、完全编译 完全编译运行如下命令,包含 kernel 、uboot、buildroot、recovery。 如果用户使用buildroot,可以使用完全编译。如果用户使用Ubuntu系统,则不需要使用完全编译。 ./build.sh 该脚本默认编译buildroot根文件系统。build.sh脚本运行完成后,会将分区镜像和统一固件update.img放在rockdev/目录下,同时创建IMAGE/目录备份。 完全编译失败尝试模块化编译。 5、模块化编译 (1)编译u-boot ./build.sh uboot (2)编译kernel ./build.sh kernel (3)编译rootfs 本SDK支持三种根文件系统,分别是buildroot、Debian、Ubuntu;编译 Buildroot 环境搭建所依赖的软件包安装命令如下: sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libu***-1.0-0-dev python-linaro-image-tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo liblz4-tool genext2fs 搭建环境完成后,编译buildroot,执行如下命令: sudo ./build.sh rootfs 编译出现 g++: internal compiler error: Killed (program cc1plus)问题 是内存不足造成的,通过以下语句扩大内存后,重新编译 sudo dd if=/dev/zero of=/swapfile bs=64M count=16 sudo mkswap /swapfile sudo swapon /swapfile 完成上述后,会在rootfs目录下,生成linaro-rootfs.img.修改device/rockchiwp/.BoardConfig.mk中的根文件系统路径即可,参考配置前编译中的“配置Rootfs”. 经过上述方法编译仍然失败。 方案二: 先清理之前失败的配置: sudo ./build.sh cleanall 1、配置roofs 源码中默认的Linux rootfs是buildroot,如果rootfs使用buildroot,跳过此步,如果用户需要使用Ubuntu,需要通过以下步骤来配置:本次使用ubuntu配置 (1)下载根文件系统 (2)拷贝到虚拟机下 (3)解压,并将解压之后的ubuntu1604armhf-rootfs.img(2.6G),拷贝根文件系统到rootfs目录下 sudo p7zip -d ubuntu1604armhf-rootfs.7z sudo cp ubuntu1604armhf-rootfs.img linux-sdk/rootfs (4) 在device/rockchip/rk3288/firefly-rk3288.mk中, 将“# rootfs image path”修改为: export RK_ROOTFS_IMG=rootfs/ubuntu1604armhf-rootfs.img 2、编译配置文件 sudo ./build.sh firefly-rk3288.mk 运行完上述脚本后,在device/rockchip/目录下,生成.BoardConfig.mk 软链接 device/rockchip/rk3288/firefly-rk3288.mk 3、模块化编译 (1)编译u-boot sudo ./build.sh uboot (2)编译kernel sudo ./build.sh kernel (3)编译rootfs 根文件系统Ubuntu 步骤1 (3)中ubuntu1604armhf-rootfs.img镜像已经做好,不需要再编译 4、打包固件 (1)parameter分区表 parameter.txt文件中包含了固件的重要信息,如以rk3288为例: 路径:device/rockchip/rk3288/parameter-ubuntu.txt CMDLINE属性是我们关注的地方,以uboot为例 0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置0x00002000为分区的大小,后面相同,用户可以根据自己需要增减或者修改分区信息,但是请最少保留uboot,trust,boot,rootfs分区,这是机器能正常启动的前提条件。 分区介绍: uboot 分区: uboot编译出来的 uboot.img. trust 分区: uboot编译出来的 trust.img misc 分区: misc.img开机检测进入recovery模式.(可省略) boot 分区: 编译出来的 boot.img包含kernel和设备树信息. recovery 分区: 烧写 recovery.img.(可省略) backup 分区: 预留,暂时没有用。后续跟 android 一样作为 recovery 的 backup 使用. oem 分区: 给厂家使用,存放厂家的 app 或数据,只读,代替原来音箱的 data 分区,挂载在/oem 目录.(可省略) rootfs 分区: 存放 buildroot 或者 debian 编出来的rootfs.img只读. userdata 分区: 存放app临时生成的文件或者是给最终用户使用。可读写,挂载在/userdata目录下.(可省略) 在/userdata目录下.(可省略) (2)package-file package-file文件用于打包统一固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。 路径tools/linux/Linux_Pack_Firmware/rockdev/目录下,以package-file为例: # NAME Relative path # #HWDEF HWDEF package-file package-file bootloader Image/MiniLoaderAll.bin parameter Image/parameter.txt trust Image/trust.img uboot Image/uboot.img boot Image/boot.img rootfs:grow Image/rootfs.img backup RESERVED (3)打包 (3.1)整理分区镜像到rockdev/目录下: ./mkfirmware.sh 忽略出现的错误 注意:每次打包固件前,需要运行mkfirmware.sh脚本更新rockdev/下的分区镜像 (3.2)整合统一固件 ./build.sh updateimg 出现错误 修改办法: (1)打开package-file文件, (2)由于现在用的ubuntu的核,将该文件中的rootfs.img修改为新的 ubuntu1604armhf-rootfs.img 重新执行整理分区镜像到rockdev/目录下和整合统一固件后出现以下错误,缺少update.img文件。 rk3288有两种烧写固件方式,而现在我用的ubuntu核,所以只能用多分区镜像下载的方式。
1、下载Linux工具 Upgrade_Tool 后, 按以下方法安装到系统中,方便调用: 执行以下命令: unzip Linux_Upgrade_Tool_v1.34.zip cd Linux_Upgrade_Tool sudo mv upgrade_tool /usr/local/bin sudo chown root:root /usr/local/bin/upgrade_tool sudo chmod a+x /usr/local/bin/upgrade_tool 一定要给upgarde_tool增加可执行的权限,不然出现upgrade_tool: command not found的错误。 2、烧写分区镜像 烧写Ubuntu 16.04 GPT固件 GPT和MBR对应两种不同的磁盘分区格式。 3、连接设备 有两种方法可以使设备进入升级模式 选择如下模式:
4、先测试用Linux 下烧写官方提供的统一固件 (1)固件下载地址: (2)准备固件 (3) 解压文件: tar -xzvf FIREFLY-RK3288-UBUNTU16.04-GPT-20190304-1215.img.tar.gz (4)烧写统一固件 sudo upgrade_tool uf /path/firmware(固件路径) 如果烧写失败,先尝试擦出flash,然后再升级。 sudo upgrade_tool ef /path/firmware(固件路径) sudo upgrade_tool uf /path/firmware(固件路径) 4、烧写分区镜像 烧写分区镜像时,GPT分区和MBR分区有不相同的命令参数,因此区分开: GPT分区使用以下列表: sudo upgrade_tool ul $LOADER sudo upgrade_tool di -p $PARAMETER sudo upgrade_tool di -uboot $UBOOT sudo upgrade_tool di -trust $TRUST sudo upgrade_tool di -b $BOOT sudo upgrade_tool di -r $RECOVERY sudo upgrade_tool di -m $MISC sudo upgrade_tool di -oem $OEM sudo upgrade_tool di -userdata $USERDATA sudo upgrade_tool di -rootfs $ROOTFS |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
353 浏览 1 评论
1758 浏览 1 评论
3013 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
3751 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
6562 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 03:34 , Processed in 0.646007 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号