本帖最后由 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”