编译
Linux 固件(GPT)
前言
本 SDK 开发环境是在 Ubuntu 上开发测试的。我们推荐使用 Ubuntu 16.04 的系统进行编译。其他的 Linux 版本可能需要对软件包做相应调整。 除了系统要求外,还有其他软硬件方面的要求。
准备工作
硬件要求:
64 位系统,硬盘空间大于 40G。如果您进行多个构建,将需要更大的硬盘空间。
软件要求:编译环境初始化
$ sudo apt-get install git gnupg flex bison gpe
rf build-essen
tial \ zip tar curl libc6-dev libncu
rses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libre
adline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 cmake tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop lib32st
dc++6 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
sudoapt-getinstallgitgcc-
arm-linux-gnueabihfu-boot-toolsdevice-tree-com
pilermtools\partedlibudev-devlib
usb-1.0-0-devpython-linaro-image-toolslinaro-image-toolslibssl-dev\autotools-devlibsigsegv2m4libdrm-devcurlse
dmakebinutilsbuild-essentialgccg++bash\patchgzipbzip2perltarcpiopythonunziprsyncfilebcwgetlibncurses5libglib2.0-devopenssh-clientlib32stdc++6
$ 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:Github上同步SDK;2:下载源码包(推荐国内用户使用)
Github上同步SDK
mkdirlinuxcdlinuxgitclonehttps://github.com/Firefly
Team/repo.git
repoinit--repo-urlhttps://github.com/FireflyTeam/repo.git-uhttps://github.com/FireflyTeam/manifests.git-blinux-sdk-mrk3328/rk3328_linux_release.xml
下载源码包(推荐国内用户使用)
mkdirlinuxcdlinuxgitclonehttps://github.com/FireflyTeam/repo.git
注意:解压完之后,用户可能会疑惑看不到文件。在linux/目录运行ls-a命令,有.repo/目录,这是我们的仓库。
同步源码:
注意:从Github上同步SDK时,部分国内用户会有不稳定的现象,这就需要多次运行同步命令reposync-c才可以
目录
$ tree -L 1 . ├── app ├── buildroot buildroot根文件系统的编译目录 ├── build.sh -> device/
rockchip/common/build.sh 全自动编译脚本 ├── device ├── distro ├── docs 开发文档 ├── envsetup.sh -> buildroot/build/envsetup.sh ├── external ├── kernel 内核 ├── Makefile -> buildroot/build/Makefile ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh 打包脚本 ├── prebuilts ├── rkbin ├── rkflash.sh -> device/rockchip/common/rkflash.sh 烧写脚本 ├── rootfs ├── tools └── u-boot
编译SDK
编译前配置:
在device/rockchip/rk3328/目录下,选择对应的板型的配置文件
本文例子:确定选用rk3328/aio-rk3328-jd4.mk
aio-rk3328-jd4.mk 相关配置介绍:
# Target arch exp
ort RK_ARCH=arm64 64位ARM架构 # Uboot defconfig export RK_UBOOT_DEFCONFIG=firefly-rk3328 u-boot配置文件 # Kernel defconfig export RK_KERNEL_DEFCONFIG=firefly-roc-rk3328-pc_defconfig kernel配置文件 # Kernel dts export RK_KERNEL_DTS=rk3328-firefly-aiojd4 dts文件 # pa
rameter for GPT table export RK_PARAMETER=parameter-ubuntu.txt 分区表(关键) # rootfs image path export RK_ROOTFS_IMG=buildroot/output/$RK_CFG_BUILDROOT/images/rootfs.$RK_ROOTFS_TYPE 根文件系统路径
重点:
配置Rootfs
源码中默认的Linux rootfs是buildroot,如果rootfs使用buildroot,跳过此步,如果用户需要使用Ubuntu,需要通过以下步骤来配置:
以Ubuntu18.04为例
1、 下载根文件系统:ubuntu18.04 根文件系统(64位)https://pan.baidu.com/s/1lwtFtQqIRbXq-6JSiDBXYg(提取码:yo4z),放到SDK路径下;
2、 该文件为7z压缩包,解压该文件;
7zxrk3328-ubuntu1804-arm64-rootfs.7z
3、 完成上述后,得到rk3328-ubuntu1804-arm64-rootfs.img(2.6G),拷贝根文件系统到rootfs目录下;
cprk3328-ubuntu1804-arm64-rootfs.imgrootfs/
4、 在device/rockchip/rk3328/aio-rk3328-jd4.mk中, 将“# rootfs image path”修改为:
exportRK_ROOTFS_IMG=rootfs/rk3328-ubuntu1804-arm64-rootfs.img
编译配置文件:
./build.shaio-rk3328-jd4.mk
运行完上述脚本后,在device/rockchip/目录下,生成.BoardConfig.mk 软链接 device/rockchip/rk3328/aio-rk3328-jd4.mk
完全编译
完全编译运行如下命令,包含 kernel 、uboot、buildroot、recovery。 如果用户使用buildroot,可以使用完全编译。如果用户使用Ubuntu系统,则不需要使用完全编译。
注意:该脚本默认编译buildroot根文件系统,若用户需要用的根文件系统是Debian或者Ubuntu16.04时,请!先!将!对应的根文件系统准备好,不然在执行该build.sh脚本时,会在整理分区镜像、打包固件时出错,这部分操作在以下的“部分编译”中“编译rootfs”有详细说明,按照操作执行即可!
build.sh脚本运行完成后,会将分区镜像和统一固件update.img放在rockdev/目录下,同时创建IMAGE/目录备份。
模块化编译:
编译rootfs:
本SDK支持三种根文件系统,分别是buildroot、Debian、Ubuntu;
编译 Buildroot 环境搭建所依赖的软件包安装命令如下:
sudoapt-getinstallrepogit-coregitkgit-guigcc-arm-linux-gnueabihfu-boot-toolsdevice-tree-compiler\gcc-aarch64-linux-gnumtoolspartedlibudev-devlibusb-1.0-0-devpython-linaro-image-toolslinaro-image-tools\autoconfautotools-devlibsigsegv2m4intltoollibdrm-devcurlsedmakebinutilsbuild-essentialgccg++bash\patchgzipbzip2perltarcpiopythonunziprsyncfilebcwgetlibncurses5libqt4-devlibglib2.0-devlibgtk2.0-dev\libglade2-devcvsgitmercurialrsyncopenssh-clientsubversio
nasciidocw3mdblatexgraphvizpython-matplotlib\libc6:i386libssl-devtexinfoliblz4-toolgenext2fs
搭建环境完成后,编译buildroot,执行如下命令:
编译 Debian 环境搭建所依赖的软件包安装命令如下:
sudoapt-getinstallrepogit-coregitkgit-guigcc-arm-linux-gnueabihfu-boot-toolsdevice-tree-compiler\gcc-aarch64-linux-gnumtoolspartedlibudev-devlibusb-1.0-0-devpython-linaro-image-toolslinaro-image-tools\gcc-4.8-multilib-arm-linux-gnueabihfgcc-arm-linux-gnueabihflibssl-devgcc-aarch64-linux-gnug+confautotools-dev\libsigsegv2m4intltoollibdrm-devcurlsedmakebinutilsbuild-essentialgccg++bashpatchgzipbzip2perl\tarcpiopythonunziprsyncfilebcwgetlibncurses5libqt4-devlibglib2.0-devlibgtk2.0-devlibglade2-devcvs\gitmercurialrsyncopenssh-clientsubversionasciidocw3mdblatexgraphvizpython-matplotliblibc6:i386\libssl-devtexinfoliblz4-toolgenext2fs
搭建环境完成后,编译Debian,按照自身需求,执行如下命令:
cdrootfs/## Usage for 32bit DebianBuildingabasedebiansystembyubuntu-build-serv
icef
romlinaro.sudoapt-getinstallbinfmt-supportqemu-user-staticsudodpkg-iubuntu-build-service/packages/*sudoapt-getinstall-fRELEASE=stretchTARGET=desktopARCH=armhf./mk-base-debian.shBuildingtherk-debainrootfswithdebug:VERSION=debugARCH=armhf./mk-rootfs-stretch.shCreatingtheext4image(linaro-rootfs.img):./mk-image.sh------------------------------------------------------------------## Usage for 64bit DebianBuildingabasedebiansystembyubuntu-build-servicefromlinaro.sudoapt-getinstallbinfmt-supportqemu-user-staticsudodpkg-iubuntu-build-service/packages/*sudoapt-getinstall-fRELEASE=stretchTARGET=desktopARCH=arm64./mk-base-debian.shBuildingtherk-debainrootfswithdebug:VERSION=debugARCH=arm64./mk-rootfs-stretch-arm64.shCreatingtheext4image(linaro-rootfs.img):./mk-image.sh
完成上述后,会在rootfs目录下,生成linaro-rootfs.img.修改device/rockchip/.BoardConfig.mk中的根文件系统路径即可,参考配置前编译中的“配置Rootfs”.
以Ubuntu18.04为例
1、 下载根文件系统:ubuntu18.04 根文件系统(64位)https://pan.baidu.com/s/1lwtFtQqIRbXq-6JSiDBXYg(提取码:yo4z),放到SDK路径下;
2、 该文件为7z压缩包,解压该文件;
7zxrk3328-ubuntu1804-arm64-rootfs.7z
3、 完成上述后,得到rk3328-ubuntu1804-arm64-rootfs.img(2.6G),拷贝根文件系统到rootfs目录下;
cprk3328-ubuntu1804-arm64-rootfs.imgrootfs/
补充说明:
./build.sh--help====USAGE:build.shmodules====uboot-buildubootkernel-buildkernelrootfs-builddefaultrootfs,currentlybuildbuildrootasdefaultbuildroot-buildbuildrootrootfsyocto-buildyoctorootfs,currentlybuild
rosasdefaultros-buildrosrootfsdebian-builddebianrootfs
pcba-buildpcbarecovery-buildrecoveryall-builduboot,kernel,rootfs,recoveryimagecleanall-cleanuboot,kernel,rootfs,recoveryfirmware-packalltheimageweneedtobootupsystemupdateimg-packupdateimag
esdbootimg-packsdbootimagesave-saveimages,patches,commandsusedtodebugdefault-buildallmodulesBoardConfig-selectthecorrespondingBoardConfig.mkfile
recovery分区在Ubuntu系统中不会用到,若有需要,可运行如下命令:
打包固件
parameter分区表
parameter.txt文件中包含了固件的重要信息,如以rk3288为例: 路径:device/rockchip/rk3328/parameter-ubuntu.txt
FIRMWARE_VER:8.1固件版本MACHINE_MODEL:rk3328固件板型MACHINE_ID:007MANUFACTURER:RK3328MAGIC:0x5041524BATAG:0x00200800MACHINE:3328CHECK_MASK:0x80PWR_HLD:0,0,A,0,1TYPE:GPT分区类型CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00010000@0x0000a000(boot),0x00010000@0x0002a000(b
ackup),-@0x0005a000(rootfs:grow)uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
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目录下.(可省略)
在parameter.txt文件中,仅仅保留了5个不可缺少的分区。
注意:若发现根文件分区大小异常时,执行如下命令:
package-file
package-file文件用于打包统一固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。 路径tools/linux/Linux_Pack_Firmware/rockdev/目录下,以package-file为例:
# NAME Relative path##HWDEF HWDEFpackage-filepackage-filebootloaderImage/MiniLoaderAll.binparameterImage/parameter.txttrustImage/trust.imgubootImage/uboot.imgbootImage/boot.imgrootfs:growImage/rootfs.imgbackupRESERVED
打包
提示:在运行./mkfirmware时,可能会遇到如下报错:
error: /home/ljh/proj/linux-sdk/buildroot/output/rockchip_rk3328_recovery/images/recovery.img not found!
表示recovery分区没有找到,类似的如oem.img、userdata.img,上文提到,这些属于可省略分区镜像,可以不用理会。
注意:每次打包固件前,需要运行mkfirmware.sh脚本更新rockdev/下的分区镜像
烧写固件
Windows升级
下载 AndroidTool2.58后,解压,运行里面的 AndroidTool.exe(注意,如果是 Windows 7/8,需要按鼠标右键,选择以管 理员身份运行),如下图:
前提:设备烧写固件或分区镜像时,需处于Loader模式或Maskrom模式,参考设备模式
烧写统一固件 update.img
烧写统一固件 update.img 的步骤如下:
-
切换至”升级固件”页。
-
按”固件”按钮,打开要升级的固件文件。升级工具会显示详细的固件信息
-
按”升级”按钮开始升级。
-
如果升级失败,可以尝试先按”擦除Flash”按钮来擦除 Flash,然后再升级。
注意:如果你烧写的固件loader版本与原来的机器的不一致,请在升级固件前先执行”擦除Flash”。
烧写分区映像
烧写分区映像时,请使用对应SDK下的FFTools/AndroidTool.rar烧写。步骤如下:
-
切换至”下载镜像”页。
-
勾选需要烧录的分区,可以多选。
-
确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。
-
点击”执行”按钮开始升级,升级结束后设备会自动重启。
Linux升级
下载Upgrade_tool1.34.zip后,解压,将upgrade_tool拷贝到/usr/local/bin/目录下,操作如下:
unzipLinux_Upgrade_Tool_v1.34.zipcdLinux_Upgrade_Toolsudomvupgrade_tool/usr/local/binsudochownroot:root/usr/local/bin/upgrade_tool
统一固件烧写
sudoupgrade_toolufupdate.img
分区镜像烧写
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 -rootfs $ROOTFS
#全自动烧写./rkflash.sh#分区镜像烧写./rkflash.shloader./rkflash.shparameter./rkflash.shuboot./rkflash.shtrust./rkflash.shboot./rkflash.shrootfs
说明:rkflash.sh该脚本文件的原理便是使用upgrade_tool工具烧写
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
`ROC-RK3328-CC是Firefly推出的首个超小型开源主板,采用了RK3328四核A53X4 64位处理器,ARM Mali-450 MP2 四核GPU,独特的USB3.0接
发表于 03-08 20:24
怎样去查看RK3328主板的gpio口呢?RK3328 linux命令是怎样进入gpio口的呢?
发表于 03-09 07:09
本文档的主要内容详细介绍的是RK3328硬件参考设计资料合集免费下载包括了:RK3328硬件设计指南,和RK3328数据手册,及相关资料合集免费下载。
发表于 04-19 08:00
•69次下载
ROC-RK3328-CC,是 Firefly 荣誉出品的第一块信用卡大小、性能强、功耗小的开源主板。
发表于 11-13 11:05
•2249次阅读
RK 固件release_update.img包含引导加载程序loader.img和实际的固件数据update.img:
发表于 12-18 14:34
•2123次阅读
编译 Android 8.1
准备
硬件配置
发表于 12-18 14:35
•1403次阅读
本文介绍了如何将主机上的固件文件,通过Type-C数据线,烧录到开发板的闪存中。
发表于 12-18 15:06
•2078次阅读
目前CORE-RK3328-JD4官方提供的固件格式仅有:
RK固件(Rockchip firmware)
发表于 12-18 15:16
•1766次阅读
AIO-RK3328-JD4 有灵活的启动方式。
发表于 12-18 15:13
•2069次阅读
AIO-RK3328-JD4 提供了丰富的接口,主要包括:电源接口, 1 x USB3.0(device),5 x USB2.0(接口×4,座子×1),HDMI显示接口,以太网,WIFI天线,蓝牙
发表于 12-18 15:43
•2793次阅读
采用Rockchip RK3328四核64位A53处理器,板载AI神经网络加速芯片,高算力,高效能,可作为基于视觉的深度学习运算和AI算法加速,拥有强大的硬解码能力与丰富的扩展接口,支持多系统操作,适用于集群服务器、高性能计算/存储、工业电脑等行业
发表于 12-19 16:32
•1383次阅读
ROC-RK3328-PC 有灵活的启动方式。一般情况下,除非硬件损坏,ROC-RK3328-PC开发板是不会变砖的。
发表于 12-21 09:59
•2721次阅读
ROC-RK3328-PC,是 Firefly 荣誉出品的第一块信用卡大小、性能强、功耗小的开源主板。
发表于 12-21 10:37
•3269次阅读
电子发烧友网站提供《Core 3328 JD4源代码Linux SDK包(仅支持RK3328).txt》资料免费下载
发表于 09-13 10:34
•11次下载
电子发烧友网站提供《Core 3328 JD4源代码RK3328 Android8.1 SDK包.txt》资料免费下载
发表于 09-13 10:33
•10次下载
评论