• RK3328官方文档

编译环境

系统:Ubuntu14.04(server版)
内核:4.4.0-142-generic

基本上与官方文档没什么特别大的出入,只有在编译Ubuntu根文件系统时有些许差异。

准备工作

硬件要求:

64 位系统,硬盘空间大于 40G。如果进行多个构建,将需要更大的硬盘空间。

软件要求:编译环境初始化

  • 预先安装所需环境依赖

$ 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 mingw32 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
  • 安装 ARM 交叉编译工具链和编译内核相关软件包

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

下载LINUX-SDK:下载源码包(推荐国内用户使用)

  • 下载repo工具:
$ cd /opt
$ mkdir linux
$ cd linux
$ git clone https://github.com/FireflyTeam/repo.git
  • 源码包

Linux-SDK GPT 源码包 (提取码:f4hg)

解压文件:7z x linux-sdk-3328.7z,可通过以下命令安装7z

$ sudo apt install p7zip-full

把下载好的源码包上传到创建好的linux目录下

注意:解压完之后,用户可能会疑惑看不到文件。在linux/目录运行ls -a命令,有.repo/目录,这是我们的仓库。

同步源码:

# 这个命令在repo文件中有一个执行文件可使用
$ ./repo/repo sync -c

注意:从 Github 上同步 SDK 时,部分国内用户会有不稳定的现象,这就需要多次运行同步命令 repo sync -c 才可以

$ tree -L 1
.
├── app
├── buildroot buildroot根文件系统的编译目录
├── build.sh -> device/rockchip/common/build.sh 全自动编译脚本
├── device
├── distro
├── docs 开发文档
├── envsetup.sh -> buildroot/build/envsetup.sh
├── external
├── kernel 内核
├── Makefile -> buildroot/build/Makefile
├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh 打包脚本
├── prebuilts
├── rkbin
├── rkflash.sh -> device/rockchip/common/rkflash.sh 烧写脚本
├── rootfs
├── tools
└── u-boot

编译 Ubuntu 根文件系统(Ubuntu 16.04 amd64)

  • 安装依赖包:
$ sudo apt-get install qemu qemu-user-static binfmt-support debootstrap
  • 下载 Ubuntu core:
$ sudo mkdir ubuntu-rootfs && cd ubuntu-rootfs
$ wget -c http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.1/release/ubuntu-base-16.04.1-base-arm64.tar.gz
  • 创建一个大小为 1000M 的根文件系统映像文件,并使用 Ubuntu 的基础包去初始化:
# 快速创建一个大文件
$ fallocate -l 1000M rootfs.img
# 格式化此大文件
$ sudo 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 -xzvf ubuntu-base-16.04.1-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=firefly
$ HOST=firefly# 创建用户
$ 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
$ apt-get install ifupdown net-tools ping
$ apt-get install udev sudo ssh vim
# 退出文件系统
$ exit
# 取消挂载
$ sudo umount /mnt && cd ..
$ pwd
/opt/linux

如果还有什么想要安的软件可以在退出文件系统之前继续安装。

重要:上述命令中有一行使能串口的软连接命令,暂时可以按照这么写,因为我在后续启动的过程中,遇到了以下错误

Timed out waiting for device dev-ttyS0.device

在获取dev-ttyS0.device时超时了,默认等待5分钟才能进行下一步,这是因为在/dev目录下根本没有ttyS0这个文件,具体解决方法,我放到了后面的踩坑记录中,可参考。

  • 阿里镜像源

配置Rootfs

  • 完成上述后,得到rootfs.img(1G),拷贝根文件系统到rootfs目录下;
$ cp mnt/rootfs.img /opt/liunx/rootfs/
  • 在device/rockchip/rk3328/roc-rk3328-cc.mk中, 将“# rootfs image path”修改为:
$ cd /opt/liunx
$ sudo vim device/rockchip/rk3328/roc-rk3328-cc.mk
export RK_ROOTFS_IMG=rootfs/rootfs.img
  • 编译配置文件:
$ ./build.sh roc-rk3328-cc.mk

运行完上述脚本后,在 device/rockchip/ 目录下,生成 .BoardConfig.mk 软链接 device/rockchip/rk3328/roc-rk3328-cc.mk

模块编译

以下编译如果有遇到错误,请看最后的踩坑,如果有一样的错误可参照修改。

build脚本参数如下:

./build.sh --help====USAGE: build.sh modules====
uboot              -build uboot
kernel             -build kernel
rootfs             -build default rootfs, currently build buildroot as default
buildroot          -build buildroot rootfs
yocto              -build yocto rootfs, currently build ros as default
ros                -build ros rootfs
debian             -build debian rootfs
pcba               -build pcba
recovery           -build recovery
all                -build uboot, kernel, rootfs, recovery image
cleanall           -clean uboot, kernel, rootfs, recovery
firmware           -pack all the image we need to boot up system
updateimg          -pack update image
sdbootimg          -pack sdboot image
save               -save images, patches, commands used to debug
default            -build all modules
BoardConfig        -select the corresponding BoardConfig.mk file

编译u-boot:

$ ./build.sh uboot

编译kernel:

$ ./build.sh kernel

编译rootfs:

  • recovery 分区在 Ubuntu 系统中不会用到,若有需要,可运行如下命令:
$ ./build.sh recovery
  • 官方文档打包固件

  • 打包,整理分区镜像到rockdev/目录下

$ ./mkfirmware.sh
  • 提示:在运行./mkfirmware时,可能会遇到如下报错:
error: /home/ljh/proj/linux-sdk/buildroot/output/rockchip_rk3328_recovery/images/recovery.img not found!

表示recovery分区没有找到,类似的如oem.img、userdata.img,上文提到,这些属于可省略分区镜像,可以不用理会。

  • 整合统一固件
#该命令打包为RK固件
$ ./build.sh updateimg

注意:每次打包固件前,需要运行mkfirmware.sh脚本更新rockdev/下的分区镜像

烧写固件到SD卡中

  • 烧写 SD 卡

遇到的错误

Uboot

  • unable to execute ‘swig’: No such file or directory
  • error: command ‘swig’ failed with exit status 1

解决:


sudo apt-get install swig
  • command ‘x86_64-linux-gnu-gcc’ failed with exit status 1
  • Python.h: No such file or directory

解决:


$ sudo apt-get install python-dev

kernel

  • lz4c: not found

解决:


$ sudo apt-get install liblz4-tool 

打包

  • genext2fs: command not found

解决:


$ sudo apt-get install genext2fs

启动

  • Timed out waiting for device dev-ttyS0.device

首先这个错误是因为在/dev目录下根本没有ttyS0这个文件,**ls*命令后,只看到了ttyS1文件,好像也不一定是S1也有可能是别的数字,视情况而定。

解决:

$ ls /etc/systemd/system/getty.target.wants -al
lrwxrwxrwx 1 root root   34 Jul 19  2016 getty@tty1.service -> /lib/systemd/system/getty@.service
lrwxrwxrwx 1 root root   41 Aug  1 02:19 serial-getty@ttyS0.service -> /lib/systemd/system/serial-getty@.service
# 先把S0那条软连接删除
$ cd /etc/systemd/system/getty.target.wants
$ sudo rm -rf serial-getty@ttyS0.service
# 因为确定我/dev下存在的是ttyS1文件,所以再次运行使能串口的软连接,不同的是改成S1
$ ln -s /lib/systemd/system/serial-getty\@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS1.service
  • A job is running for… network interfaces

这个不能算是错误,这个原因是因为你没有插网线,网络原因造成的,因为前面设置的是dhcp动态获取IP地址,在没有插网线的情况下,这个信息会在5分钟之内一直获取IP,要想timeout时间短点修改以下设置。

解决:

$ sudo vim /etc/systemd/system/network-online.target.wants/networking.service
# 找到以下参数并修改,默认单位是秒,可自由修改时间,退出保存即可
imeoutStartSec=20

RK3328安装liunx(ubuntu16.04)RK固件相关推荐

  1. 戴尔Latitude 3420:安装win10+ubuntu16.04双系统下找不到wifi

    文章目录 前言 一.查看ubuntu内核版本 二.升级ubuntu内核 1.安装升级内核所需文件 2.下载对应的内核文件 3.安装5.3.5内核 三.安装驱动 1.重启遇到问题 2.安装驱动 前言 参 ...

  2. Win7下使用U盘安装linux Ubuntu16.04双系统图文教程

    Win7下使用U盘安装linux Ubuntu16.04双系统图文教程 Ubuntu(友帮拓.优般图.乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于DebianGN ...

  3. 安装完Ubuntu16.04后要做的事

    安装好Ubuntu16.04后要做的事 更新软件源 软件源使用国内比较知名的软件源例如163,清华,中科大等的软件源这些软件源的访问速度在国内也是比较快的. sudo vim /etc/apt/sou ...

  4. 毁灭者p6安装win10+Ubuntu16.04双系统血泪经验总结

    在自己的毁灭者p6上安装win10+Ubuntu16.04,安到吐血,以下是血泪经验总结: 引子 首先制作iso镜像UltraISO.网上都有不多说. 然后,我是在默认的windows10 中去掉一个 ...

  5. 游戏本(神舟战神Z7M-KP7GT)安装win10+Ubuntu16.04+显卡安装

    1.游戏本(神舟战神Z7M-KP7GT)安装win10+Ubuntu16.04详细教程https://www.jianshu.com/p/888bb5ad02f3?utm_campaign=males ...

  6. 笔记本安装Win10+Ubuntu16.04 LTS 双系统

    目标:安装Win10 + Ubuntu16.04 LTS 双系统 电脑:小米Air 13.3 高配版 工具: 硬件:U盘(2G就够,镜像包解压后文件大小为1.5G; FAT32格式, NTFS格式不识 ...

  7. UEFI安装Win10/Ubuntu16.04双系统记录

    本文基于以下硬件环境: 主板:华硕ROG B250G 硬盘:浦科特M8PEG 256g(NVME M.2) 1. 操作系统相关科普 为安装双系统,我在网上查了许多资料,一些名词似曾相识却又不解其意,特 ...

  8. ubuntu双系统引导梅花_手把手教你安装win10+Ubuntu16.04的双系统(全网最详细)

    点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自AI蜗牛车,禁二次转载 前言 本系列为小白入门整个AI项目教程,主要涉及双系统 ...

  9. 手把手教你安装win10+Ubuntu16.04的双系统(全网最详细)

    点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自AI蜗牛车,禁二次转载 前言 本系列为小白入门整个AI项目教程,主要涉及双系统 ...

最新文章

  1. 在CentOS 6.9 x86_64的nginx 1.12.2上安装第三方模块set-misc-nginx-module实录
  2. php时间相减_请教一个PHP的时间戳转换成时间相减的問題?
  3. 第五篇:Spring Boot整合filter
  4. 90 后程序员开发“AI 吵架神器”,专治女朋友各种不服!
  5. js同步-异步-回调
  6. geoda权重矩阵导入matlab,geoda 导入空间权重矩阵怎么做
  7. IDEA更改主题颜色
  8. 在CSDN年收入竟达五位数?----大学生技术自媒体成长之路
  9. 微信公众平台开发-access_token获取及应用(含源码)
  10. 机工士姆斯塔迪奥(20分)
  11. Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extension.
  12. 菜鸟Axios学习=官网
  13. 一个很好的看电子书的软件
  14. autorun.vbs病毒的清除办法
  15. python使用matplotlib库构建动态图表 --基于animation模块
  16. Mac电脑-mysql密码忘了怎么处理
  17. OPC 、OPC DA、OPC UA介绍
  18. 【非凡程序员】 OC第四节课 (复合和多态)
  19. App 适配 iOS 11
  20. 台式电脑c语言如何安装,体验篇—Type-C如何连接电脑_固态硬盘评测-中关村在线...

热门文章

  1. 最详细的虚拟机安装教程
  2. python中assert是什么意思_你常常看到 Python 代码中的 assert 是个啥?
  3. FIIL、南卡、漫步者蓝牙耳机怎么选?国产半入耳蓝牙耳机推荐
  4. 瑞莎 Renesas Flash烧录
  5. 经典BBS语录2007贺岁版
  6. 【Linux】Linux基础命令及英文全称
  7. web应用防火墙的部署方式
  8. 说说找工作这些事儿(未完)
  9. NodeMcu arduino ESP8266 使用Ticker库(多任务处理)
  10. 第四章 WEB表单(二)