|
发表于 2018-11-23 11:01:09
本帖最后由 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,去掉多余的分区,如下:
- 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
复制代码
编译脚本,最终会在当前的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"
|
|