ROC-RK3308-CC Ubuntu16.04 系统支持

本帖最后由 Livvol 于 2019-2-27 09:40 编辑

ROC-RK3308-CC 定位AIOT开源板,64 位四核 ARM Cortex-A35 的核心为其提供了不错的性能,频率最高 1.3GHz,搭配 256M ddr,使它可以运行当前几乎所有流行的轻量级的Linux操作系统。
笔者这里小试了下,移植Ubuntu16.04系统到ROC-RK3308-CC板子上,并记录在此。

首先,更新SDK到最新代码,相关操作参考:http://wiki.t-firefly.com/ROC-RK … ootfilesystem.html#

系统要跑起来,至少要具备的基本分区镜像:

  • parameter.txt
  • MiniLoaderAll.bin
  • trust.img
  • uboot.img
  • boot.img
  • rootfs.img

这里先是通过SDK,编译uboot:

$ cd u-boot/
$ ./make.sh roc-rk3308-cc

得到trust.img、rk3308_loader_xxx.bin、uboot.img 三个镜像文件

然后是编译kernel,为了支持Ubuntu,kernel需要要进行一些修改
修改dtsi以支持ext4文件系统,可读写权限

--- a/kernel/arch/arm64/boot/dts/rockchip/rk3308-firefly.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3308-firefly.dtsi
@@ -11,7 +11,7 @@
        compatible = "firefly,rk3308-firefly", "firefly,rk3308";

        chosen {
-               bootargs = "earlycon=uart8250,mmio32,0xff0c0000 swiotlb=1 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=squashfs rootwait snd_aloop.index=7";
+               bootargs = "earlycon=uart8250,mmio32,0xff0c0000 swiotlb=1 console=ttyFIQ0 rw root=PARTUUID=614e0000-0000 rootfstype=ext4 rootwait snd_aloop.index=7";
        };

        adc-keys {

修改defconfig,支持ext4,支持CGROUP等。

--- a/kernel/arch/arm64/configs/firefly-rk3308_linux_defconfig
+++ b/kernel/arch/arm64/configs/firefly-rk3308_linux_defconfig
@@ -6,6 +6,16 @@ CONFIG_FHANDLE=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
 CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_DEFAULT_USE_ENERGY_AWARE=y
 CONFIG_BLK_DEV_INITRD=y
 # CONFIG_RD_BZIP2 is not set
 # CONFIG_RD_LZMA is not set
@@ -264,8 +274,17 @@ CONFIG_RK_SFC_NAND=y
 CONFIG_RK_SFC_NOR=y
 CONFIG_ROCKCHIP_SIP=y
 CONFIG_EXT2_FS=y
-CONFIG_EXT4_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_XFS_FS=y
+CONFIG_BTRFS_FS=y
 # CONFIG_DNOTIFY is not set
+CONFIG_FUSE_FS=y
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
 CONFIG_MSDOS_FS=y
 CONFIG_VFAT_FS=y
 CONFIG_FAT_DEFAULT_CODEPAGE=936
@@ -273,15 +292,24 @@ CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
 CONFIG_NTFS_FS=y
 CONFIG_NTFS_RW=y
 CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
 CONFIG_SQUASHFS=y
 CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
+CONFIG_SQUASHFS_LZ4=y
+CONFIG_SQUASHFS_LZO=y
+CONFIG_SQUASHFS_XZ=y
 CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
 CONFIG_PSTORE=y
 CONFIG_PSTORE_CONSOLE=y
 CONFIG_PSTORE_RAM=y
-# CONFIG_NETWORK_FILESYSTEMS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_SWAP=y
 CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_936=y
+CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
 CONFIG_PRINTK_TIME=y
@@ -302,7 +330,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
 CONFIG_STRICT_DEVMEM=y
 CONFIG_DEBUG_SET_MODULE_RONX=y
 # CONFIG_CRYPTO_ECHAINIV is not set
-CONFIG_CRYPTO_CRC32C=y
 # CONFIG_CRYPTO_HW is not set
 CONFIG_ARM64_CRYPTO=y
 CONFIG_CRYPTO_SHA1_ARM64_CE=y

编译内核:

$ cd kernel/
$ make arch=arm64 firefly-rk3308_linux_defconfig
$ make arch=arm64 rk3308-roc-cc-dmic-pdm_emmc.img

得到zboot.img。

最后是根文件系统的制作,这个套路其实都是差不多的,可以参考Firefly-RK3399制作Ubuntu 16.04 根文件系统的方法:http://wiki.t-firefly.com/zh_CN/ … _ubuntu_rootfs.html,最核心的地方就是通过交叉模拟器qemu-user-static,对文件系统进行定制,这个大家按自己需求来就好,这里就不再赘述了,这里移植的是Ubuntu 16.04 64bit,按同样的方法,也可以移植其他的Ubuntu版本,例如Ubuntu 18.04 64bit。

Ubuntu16.04的镜像,可以到ubuntu cdimg 下载,选择下载ubuntu-base-16.04.1-base-arm64.tar.gz

为了快速编译,以及方便大家理解,我写了个一键编译的脚本,mk-rootfs-ubuntu_arm_64bit.sh,通过脚本即可以直接编译,脚本见百度网盘。
网盘链接: https://pan.baidu.com/s/1uhPBm246Mq6QLCzqcIUclA 提取码: t7pp

将压缩包解压后,里面会有编译脚本mk-rootfs-ubuntu_arm_64bit.sh,以及我编译好的固件,包括parameter.txt也在里面等。使用前,先编辑脚本,修改自己的信息,例如SDK路径等

# Ubuntu 镜像压缩包
UBUNTU_TAR="ubuntu-base-16.04.1-base-arm64.tar.gz"
# 工作目录
TARGET_ROOTFS_DIR="$CURDIR/binary_ubuntu_SYSTEM"
SOURCEDIR="$CURDIR/source"
MOUNTPOINT="mnt"
OUTIMAGE="ubuntu1604.img"
OUTDIR="out"
SDK_PATH="~/prj/rk3308/roc-rk3308-cc"
# 主机名字
USER="firefly"
HOST="firefly-ubuntu"

最后,记得修改 ROC-RK3308-CC的parameter.txt,去掉多余的分区,如下:
[b]

FIRMWARE_VER:8.1
MACHINE_MODEL:RK3308
MACHINE_ID:007
MANUFACTURER: RK3308
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3308
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE:mtdparts=rk29xxnand:0x00001000@0x00002000(uboot),0x00001000@0x00003000(trust),0x00006000@0x00004000(boot),-@0x0000C000(rootfs:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

[/b]
编译脚本,最终会在当前的out/目录生成各个所需的镜像文件,如:

out/
├── boot.img
├── ubuntu1604.img
├── parameter.txt
├── rk3308_loader_v1.24.108.bin
├── trust.img
└── uboot.img

通过upgrade_tool烧写分区镜像到板子上即可:

sudo upgrade_tool ul rk3308_loader_v1.24.108.bin && \
sudo upgrade_tool di -p parameter.txt && \
sudo upgrade_tool di -uboot uboot.img && \
sudo upgrade_tool di -trust trust.img && \
sudo upgrade_tool di -boot zboot.img && \
sudo upgrade_tool di -rootfs ubuntu1604.img && \
sudo upgrade_tool rd


关于网络使用:

以太网的话,直接插上网线就可以用了。
WiFi连接,使用命令nmcli device wifi connect “name” password “psk”

链接: https://pan.baidu.com/s/12Hzp7dEdciz9dgpDha3d8w 提取码: qgxf 失效
能否請樓主重新分享一下
感謝

lcwangtw 发表于 2019-2-25 14:35
链接: https://pan.baidu.com/s/12Hzp7dEdciz9dgpDha3d8w 提取码: qgxf 失效
能否請樓主重新分享一下
感 …

链接没问题啊

Livvol 发表于 2019-2-26 09:24
链接没问题啊

Hi 樓主大大,

  1. 我點链接, 輸入提取码後, 百度網盤顯示: 分享链接中有…內容, 無法繼續查看.
  2. 我目前參考樓主大大, Wiki及https://www.jianshu.com/p/584db061a864等3篇文章安裝Ubuntu 16.04.5, 結果燒錄後Android device沒抓到, ADB不通. 由於今年買的時候, 沒有買到適合的屏做為顯示及調適, 所以ADB不通造成現在沒法繼續下去了. 因此很想試試樓主大大的一键编译脚本, 還是請樓主大大也在Github或GitLab等分享. 感謝.

lcwangtw 发表于 2019-2-27 08:09
Hi 樓主大大,

  1. 我點链接, 輸入提取码後, 百度網盤顯示: 分享链接中有…內容, 無法繼續查看.
  2. 我目 …

我更新了链接,你试试。
制作出来的原生系统,并不支持ADBD。需要你自己去移植。

@@ -273,15 +292,24 @@
请问示例中类似这行的代码是什么意思

Jesus 发表于 2019-4-13 15:17
@@ -273,15 +292,24 @@
请问示例中类似这行的代码是什么意思

参考:https://blog.csdn.net/zwwjs/article/details/8174310

谢谢

感谢,我通过您的教程。ubuntu16.04和ubuntu18.04都已经在rk3308上跑起来了。

Livvol 发表于 2019-2-27 09:46
我更新了链接,你试试。
制作出来的原生系统,并不支持ADBD。需要你自己去移植。

请问ADBD如何移植到Ubuntu中去,能给个思路方法吗?

请问你蓝牙可以用吗?我这边好像wifi正常 蓝牙不行

您好,
我按照您的教程,试图在3308B-CC-Plus板子上移植Ubuntu固件,所有步骤似乎都成功了。
但是当把镜像烧写进去并重启板子后,LED亮起大约2秒左右后就又熄灭,然后再次亮起,如此循环往复。
请问一下问题大概会出在哪里?

烧录时显示显示:
Loading loader…
Support Type:RK3308 Loader ver:1.05 Loader Time:2018-11-13 16:16:57
Upgrade loader ok.
directlba=1,first4access=1,gpt=1
Write gpt…
Checking backup gpt failed!