yg2022 发表于 2022-2-14 11:02:13

RK3308自定义内核并编译属于自己的Ubuntu16 文件系统

基于RK3308自定义内核并编译属于自己的Ubuntu16 文件系统
硬件:firefly 生产的core-3308Y 主板
SDK:firefly提供的SDK RK3308B Linux SDK
编译环境:vmware 虚拟机 ubuntu16

wiki 主页:
Firefly | 让科技更简单,让生活更智能​
wiki.t-firefly.com/

注意:一下操作都是在vmware 虚拟机中完成。
文件系统编译

    安装依赖环境:

$sudo apt-get install git gnupg flex bison gperf build-essential \
zip tar curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib cmake tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop lib32stdc++6

$sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

$sudo apt-get install gcc-arm-linux-gnueabihf \
gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev \
libssl1.0.0 libssl-dev

$sudo apt-get install qemu qemu-user-static binfmt-support debootstrap

    下载 rk3308 linux SDK

下载完成后,进入到sdk 文件夹,创建ubuntu-rootfs 文件夹

cd rk3308-linux
mkdir ubuntu-rootfs && cd ubuntu-rootfs

    下载ubuntu core

Ubuntu Base 16.04.6 LTS (Xenial Xerus)​
cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/

wget -c http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04.6-base-arm64.tar.gz

    创建根文件系统镜像文件,文件大小根据主板存储空间确定

# 快速创建一个大文件
$ fallocate -l 2048M rootfs.img
# 格式化此大文件
$ mkfs.ext4 -F -L ROOTFS rootfs.img
$ mkdir mnt
# 把大文件挂载到mnt文件下
$ sudo mount rootfs.img mnt
# 把下载好的ubuntu解压到mnt文件下,此时因为mnt与rootfs.img有关联,放到mnt文件下,就是放到了rootfs.img文件中了
$ sudo tar -xvf ubuntu-base-16.04.6-base-arm64.tar.gz -C mnt/
$ sudo cp -a /usr/bin/qemu-aarch64-static mnt/usr/bin/
# 把本机中的dns文件放到mnt中,否则在进入文件系统时无法连接网络, 官网中是手动设置的dns文件,此时不设置,后续配置会遇到/etc/network/interfaces.d/eth0: No Such file or directory
$ sudo cp /etc/resolv.conf mnt/etc/

qemu-aarch64-static是其中的关键,能在 x86_64 主机系统下 chroot 到 arm64 文件系统

    使用chroot 命令初始化文件系统

$ sudo chroot mnt/
# 这里可以修改设置
$ USER=ait
$ HOST=ait
# 创建用户
$ useradd -G sudo -m -s /bin/bash $USER
$ passwd $USER
# 输入密码

# 设置主机名和以太网
$ echo $HOST > /etc/hostname
$ echo "127.0.0.1    localhost.localdomain localhost" > /etc/hosts
$ echo "127.0.0.1    $HOST" >> /etc/hosts
# 如果不需要联网的话 ,不需要创建
$ echo "auto eth0" > /etc/network/interfaces.d/eth0
$ echo "iface eth0 inet dhcp" >> /etc/network/interfaces.d/eth0

# 使能串口
$ ln -s /lib/systemd/system/serial-getty\@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service

# 安装包,在安装之前可以进行更换镜像源,也可以不进行更换,如果遇到速度慢等问题,可以更换国内镜像源
$ apt-get update
$ apt-get upgrade
# 安装软件
$sudo apt install sudo vim pkg-config libssl-dev udevssh vim
$sudo apt-get install build-essential(错误:No CMAKE_CXX_COMPILER could be found.)
$sudoapt-get install ifupdown net-tools network-manager(没有网不需要安装)
$sudo apt-get install bsdmainutils (hexdump 命令)

    退出文件系统

# 退出文件系统
$ exit
# 取消挂载
$ sudo umount /mnt && cd ..

    将创建的ubuntu 文件系统 rootfs.img 复制到rootfs文件夹中,并将名字修改为:rk3308-ubuntu_rootfs.img

内核编译

    修改板级配置文件,roc-rk3308b-cc_ubuntu_release_BoardConfig.mk(文件位置:device/rockchip/rk3308)

#!/bin/bash

CMD=`realpath $BASH_SOURCE`
CUR_DIR=`dirname $CMD`

source $CUR_DIR/roc-rk3308b-cc_release_BoardConfig.mk

# Kernel defconfig
export RK_KERNEL_DEFCONFIG=firefly-rk3308b-ubuntu_linux_defconfig
# Kernel dts
export RK_KERNEL_DTS=rk3308b-roc-cc-amic_ubuntu_emmc
# parameter for GPT table
export RK_PARAMETER=parameter-64bit-ubuntu.txt
# packagefile for make update image
export RK_PACKAGE_FILE=rk3308-package-file-ubuntu
# rootfs image path
export RK_ROOTFS_IMG=rootfs/rk3308-ubuntu_rootfs.img

    修改内核配置文件

由roc-rk3308b-cc_ubuntu_release_BoardConfig.mk文件内容可以知道,内核是基于firefly-rk3308b-ubuntu_linux_defconfig,因此想要修改内核配置只需要修改firefly-rk3308b-ubuntu_linux_defconfig即可。

$ cp arch/arm64/configs/firefly-rk3308b-ubuntu_linux_defconfig arch/arm64/configs/firefly-rk3308b-ubuntu_linux_defconfig_back
$ make ARCH=arm64 firefly-rk3308b-ubuntu_linux_defconfig
$ make ARCH=arm64 menuconfig

在完成对内核的配置之后,保存退出。

保存一下我们的配置

$make savedefconfig
$mv defconfig arch/arm64/configs/firefly-rk3308b-ubuntu_linux_defconfig

    编译

回到sdk 根目录下,执行build命令

$./build.sh roc-rk3308b-cc_ubuntu_release_BoardConfig.mk
$./build.sh

最后
编译后,会在rockdev里面生成最新的镜像,只需要通用官方提供的下载软件下载即可。
页: [1]
查看完整版本: RK3308自定义内核并编译属于自己的Ubuntu16 文件系统