AIO-3288J四核Cortex-A17高性能主板

采用RK3288四核Cortex-A17处理器,主频高达1.8GHz,集成四核Mali-T764 GPU,性能优异。板载4G LTE扩展接口、多种显示接口和通信串口。支持Android/Linux/Ubuntu系统,开放源代码方便企业二次开发。AIO-3288J的高性能、高可靠性、高扩展性,多系统等优势,让其可以快速应用于各种行业中。

编译主线内核

更新时间:2017-12-18 阅读:1102

    1 预编译固件

    为方便测试,现提供预先编译好的使用主线内核的 Ubuntu 14.04 固件,其特性为:

    1. 集成 Mali 内核和用户驱动,以及 OpenGL ES 示例。

    2. 使用板载的 eMMC 存储,无需额外的 TF 卡。

    3. HDMI 显示支持。

    请选择以下云盘之一下载:

    并参考《升级固件》一文来烧写固件。

    2 准备工作

    本文假定工作目录是 "~/proj/linux-rockchip":

       mkdir -p ~/proj/linux-rockchip

    2.1 安装开发包

    安装开发包:

       sudo apt-get install build-essential lzop libncurses5-dev libssl-dev
       # 如果使用的是 64 位的 Ubuntu,还需要安装:
       sudo apt-get install libc6:i386

    2.2 交叉编译工具链

    本文使用 Android SDK 的预置交叉编译工具链来编译测试。

    将 Android SDK 的 prebuilt 目录拷贝到工作目录下:

       cd ~/proj/linux-rockchip
       cp -rl ANDROID_SDK/prebuilts .

    "prebuilts/gcc/linux-x86/arm/" 里的 arm-eabi-4.6 和 arm-eabi-4.7 是所需要的交叉编译工具链。其中,U-Boot 使用 arm-eabi-4.7,内核使用 arm-eabi-4.6。

    2.3 工具

    将 ANDROID SDK 里的一些工具安装到系统中:

       cd ANDROID_SDK
       cp ./kernel/mkkrnlimg /usr/local/bin
       cp ./RKTools/linux/Linux_Upgrade_Tool_v1.2/upgrade_tool /usr/local/bin

    另外建议安装 rkflashkit: https://github.com/linuxerwang/rkflashkit

    3 parameter

    以下是固件使用的 parameter 文件,最主要是分区的设定:

    • kernel: 烧写 kernel.img (RK KNRL 格式,用 mkkrnlimg 打包)

    • boot: 烧写 boot.img (RK KNRL 格式,用 mkkrnlimg 打包)

    • linuxroot: 烧写 linuxroot.img (ext4fs 格式)

       FIRMWARE_VER:4.4.2
       MACHINE_MODEL:rk30sdk
       MACHINE_ID:007
       MANUFACTURER:RK30SDK
       MAGIC: 0x5041524B
       ATAG: 0x60000800
       MACHINE: 3066
       CHECK_MASK: 0x80
       PWR_HLD: 0,0,A,0,1
       #KERNEL_IMG: 0x62008000
       #FDT_NAME: rk-kernel.dtb
       #RECOVER_KEY: 1,1,0,20,0
       CMDLINE:console=ttyS2,115200 earlyprintk root=/dev/block/mtd/by-name/linuxroot rw rootfstype=ext4 init=/sbin/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00008000@0x00002000(kernel),0x00008000@0x0000A000(boot),0x00002000@0x00012000(misc),0x00001000@0x00014000(backup),-@0x00015000(linuxroot)

    烧写 paramter 文件到设备上:

       sudo rkflashkit flash @parameter parameter.txt

    要提取设备上的 parameter 文件,可以使用:

       sudo rkflashkit backup @parameter parameter.txt

    4 U-Boot

    主线内核需要配套的 U-Boot,而不是 SDK 上的。

    4.1 编译 U-Boot

    下载并编译 U-Boot:

       cd ~/proj/linux-rockchip
       git clone -b u-boot-rk3288 https://github.com/linux-rockchip/u-boot-rockchip.git u-boot
       cd u-boot
       make rk3288_defconfig
       make -j4

    U-Boot 编译成功后,最后的几行信息是:

       LD u-boot
       OBJCOPY u-boot.bin
       OBJCOPY u-boot.srec
       ./tools/boot_merger --subfix ".01.bin" ./tools/rk_tools/RKBOOT/RK3288.ini
       out:RK3288UbootLoader.bin
       fix opt:RK3288UbootLoader_V2.19.01.bin
       merge success(RK3288UbootLoader_V2.19.01.bin)

    "RK3288UbootLoader_V2.19.01.bin" 就是成功编译出来的映像,可以用 upgrade_tool 烧写到板子上。

    4.2 Flash U-Boot

       sudo upgrade_tool ul RK3288UbootLoader_V2.19.01.bin

    5 内核

    由于主线内核版本更新很快,目前测试的版本是基于 v4.0-rc1 。

    测试分支位于:

      https://github.com/TeeFirefly/linux-rockchip/tree/firefly

    该分支基于:

      https://git.kernel.org/cgit/linux/kernel/git/mmind/linux-rockchip.git/log/?h=v4.1-armsoc/dts

    并加入 Mali 内核驱动代码:

      https://github.com/mmind/linux-rockchip/tree/devel/mali-workbench

    因为加入了命令行参数 “mtdparts=” 指定分区的支持,这样可以维持原有 RK SDK 方式,在 parameter 文件中设定 eMMC 分区。

    5.1 编译内核

    首先是下载源码:

       cd ~/proj/linux-rockchip
       git clone -b firefly https://github.com/TeeFirefly/linux-rockchip.git kernel

    然后编译内核和模块:

       cd ~/proj/linux-rockchip/kernel
       export ARCH=arm
       export CROSS_COMPILE=$PWD/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
       make rk3288_firefly_defconfig
       make -j4 zImage
       make rk3288-firefly.dtb
       cat arch/arm/boot/zImage arch/arm/boot/dts/rk3288-firefly.dtb > zImage-dtb
       mkkrnlimg zImage-dtb kernel.img    
       # 编译并安装模块
       make -j4 modules
       [ -d install_mod ] && rm -rf install_mod
       make INSTALL_MOD_PATH=$PWD/install_mod modules_install
       # 复制 install_mod 目录里的文件到根文件系统

    5.2 烧写内核

       sudo rkflashkit flash @kernel /path/to/kernel.img

    6 initramfs

    6.1 创建 boot.img

       cd ~/proj/linux-rockchip
       git clone https://github.com/TeeFirefly/initrd.git
       make -C initrd
       mkkrnlimg initrd.img boot.img # 打包成 RK KRNL 格式

    6.2 烧写 boot.img

       sudo rkflashkit flash @boot /path/to/boot.img

    7 根文件系统

    要创建根文件系统 linuxroot.img,请参考《创建 Ubuntu 根文件系统》一文。

    烧写 linuxroot.img:

       sudo upgrade_tool di linuxroot /path/to/linuxroot.img

    8 FAQ

    8.1 已知问题

    • VGA: VGA 显示支持尚未添加。

    • WiFi:AP6335 驱动尚未移植。

    由于 RK3288 的主线内核支持尚未完善,在使用过程中会出现的 HDMI 显示刷新慢,USB 外设支持不好等问题。

    8.2 zImage-dtb 是什么?

    zImage-dtb 是内核加设备树块,当 CONFIG_ARM_APPENDED_DTB 打开时,内核会在尾部查找 DTB。