构建orangePi r1 plus (RK3328)系统的整个过程

======================================

前言

 本内容是用于构建orangePi r1 plus系统的,不使用官方脚本构建,而是使用官方源码一点一点构建起来,适用有编译linux基础的开发者。

下载toolchain

地址
解压之后 添加到环境变量中

export PATH=$PATH:/home/lan/orangePi/tools/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin

下载orange_build

因为编译内核需要使用到相关的工具,这些工具可以在orangepi的官方下载到,也就是在下range_build中,点击链接
需要修改一下文件scripts/general.sh 修改内容如下图:

修改之后就不会下载全部的工具链,根据官方文档的教程编译一下uboot,和kernel,时间比较长。

编译自己的内核

下载linux内核

点击进入下载

 解压(比较喜欢用ubuntu自带的文件管理器解压,比较方便,直接右键提取到此目录)。
为了方便,需要先修改顶层makefile文件,打开makefile,在适合的地方添加上:

ARCH=arm64
CROSS_COMPILE=aarch64-none-linux-gnu-

拷贝config文件

cp /home/lan/orangePi/orangepi-build/external/config/kernel/linux-rockchip64-current.config /home/lan/orangePi/linux-orangepi-orange-pi-5.8-rockchip64/.config

然后 执行下面的命令:

cd /home/lan/orangePi/linux-orangepi-orange-pi-5.8-rockchip64
make menconfig  #进入之后配置自己需要的功能,比如nfs挂载文件系统,mac驱动编译到内核等等。 保存之后就可以开始编译了。
make -j8

等待编译完毕。之后在arch/arm64/boot 里会有一个Image未压缩的镜像文件,最终也是使用这个文件启动内核。(arm
64的内核是不压缩的。)

==========================

编译u-boot

下载uboot 下载
与前面一样解压、进入文件夹
同样先修改顶层makefile,但是有点不一样需要添加到makefile的内容如下:

ARCH=arm
CROSS_COMPILE=aarch64-none-linux-gnu-

执行命令

make orangepi_r1_plus_rk3328_defconfig

修改.congfig

默认的config是将uboot的环境变量存储在mmc0上,设备不存在mmc0所以会保存失败。要修改config使环境变量保存在mmc1中也就是sd卡。
用文本编辑器打开.config 搜索CONFIG_SYS_MMC_ENV_DEV ,然后修改值为1如:CONFIG_SYS_MMC_ENV_DEV=1 ,
搜索CONFIG_BOOTDELAY 将其值改为3。

make -j4

还需要修改一下配置参数,make menuconfig 搜索 CONFIG_OF_LIST 然后按1,会显示如下:

(rk3328-orangepi-r1-plus) Default Device Tree for DT control
(rk3328-orangepi-r1-plus) List of device tree files to include for DT control

Symbol: OF_LIST [=rk3328-orangepi-r1-plus]
│ Type : string
│ Prompt: List of device tree files to include for DT control
│ -> Location:
│ ----> Device Tree Control

将这两个参数都改成对应的设备树 rk3328-orangepi-r1-plus,如果不修改设备树,板子会检查DDR发生错误无法启动。

========================================================================================

说明一下最后生成的文件:
u-boot:由个个builtin.a链接而成的ubot原始文件可执行
u-boot-nodtb.bin:u-boot经过objcopy转换,并且添加一些段(section)之后的文件
u-boot-dtb.bin:cat u-boot-nodtb.bin dts/dt.dtb > u-boot-dtb.bin 其中dts/dt.dtb来自rk3328-orangepi-r1-plus.dtb,就是前面设置的设备树
u-boot-dtb.img:由tools/mkimage工具将设备树和u-boot-nodtb.bin两个文件整合成新的镜像文件。
u-boot.img:与u-boot-dtb.img的制作方式完全相同,这两个是一样的文件。这个也是我们最终要烧写的uboot镜像文件

以上是正常的uboot文件,下面介绍spl和tpl的镜像文件

tpl是最初的一级启动,用于初始化DDR,spl是二级引导启动,引导最终的uboot完整程序。
~~关于tpl和spl的文件在目录下的tpl、spl文件夹中。
编译之后会生成包含设备树的tpl镜像——u-boot-tpl-rockchip.bin 包含设备树的spl镜像——u-boot-spl-dtb.bin
idbloader.img:cat tpl/u-boot-tpl-rockchip.bin spl/u-boot-spl.bin > idbloader.img,spl和tpl合成了一个镜像。
u-boot-rockchip.bin:idbloader.img经过objcopy,添加段,填充FF之后生成u-boot-rockchip.bin,这个也是我们要烧写的一级、二级引导。

========================================================================================

修正 无法初始化SD卡的问题

使用闪迪的sd卡时,uboot默认的spl程序是无法初始化的,最后会启动失败

用orangepi_build带的工具制作一二级启动引导程序(其实在uboot中也有这个工具)
新建一个 mkimage.sh

vim mkimage.sh输入以下内容,具体的文件根据自己的路径进行修改。
#/bin/bashexport PATH=$PATH:/home/lan/orangePi/orangepi-build/external/cache/sources/rkbin-tools/tools
mkimage -n rk3328 -T rksd -d /home/lan/orangePi/orangepi-build/external/cache/sources/rkbin-tools/rk33/rk3328_ddr_333MHz_v1.16.bin idbloader.bin
cat /home/lan/orangePi/orangepi-build/external/cache/sources/rkbin-tools/rk33/rk3328_miniloader_v2.46.bin >> idbloader.bin
loaderimage --pack --uboot /home/lan/orangePi/orangepi-build/u-boot/v2020.10-rockchip64/u-boot-dtb.bin uboot.img 0x200000

idbloader.bin 是合并了rk3328_ddr_333MHz_v1.16.bin rk3328_miniloader_v2.46.bin两个程序,适用于uboot引导。这是瑞芯微官方给的引导启动程序,不能使用uboot编译出来的spl 和tpl程序,spl程序在初始化sd卡的时候有问题,无法初始化。如果有能力修改的话也可以将它修复。

======================================================================================

构建根文件系统

根文件系统的构建网上很多,这里采用了正点原子的linux驱动开发教程38.2节,按照教程可以成功构建。
等我摸清楚busybox 会专门出一章。

系统烧录

这里的系统烧录是直接将SD卡直接制作成启动盘使用,没有制作烧录文件,这样可以很清楚知道uboot、kernel、rootfs、dtb的存放位置具体步骤如下:
1、磁盘分区
安装一个ubuntu下运行的软件,当然会使用mkfs命令也一样能做。

sudo apt-get install gparted

安装好,插入读卡器,然后打开软件(可以使用Ubuntu的启动,ubuntu18在右下角点开启动,搜索gparted双击启动),右上角,切换盘符/dev/sdb,如下:

这里我已经做好分区了,具体步骤如下:

1、卸载SD卡
2、点击设备、创建分区,然后确定,选择gpt。
3、新建分区,格式为fat32,前留16M,分区大小112M,然后确定。 如下图

3、新建分区,分区类型为ext4,可以把后面的大小全部给这个分区,这是用于存放文件系统的。
4、修改卷标fat32分区改为boot,ext4分区改为rootfs
5、上方点击打勾

具体的分区表查看下图


烧写uboot

将sd卡连接到Ubuntu下,在命令行下输入以下指令:

sudo dd if=idbloader.bin of=/dev/sdb seek=64
sudo dd if=boot.img of=/dev/sdb seek=16384

拷贝内核和设备树

先要挂载才能拷贝或者直接断开SD,再连接,之后会在media下自动挂载。

sudo cp -r /home/lan/orangePi/linux-orangepi-orange-pi-5.8-rockchip64/arch/arm64/boot/Image /media/lan/BOOT
sudo cp -r /home/lan/orangePi/linux-orangepi-orange-pi-5.8-rockchip64/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1plus.dtb /media/lan/BOOT
sudo cp -r /home/lan/orangePi/rootfs/* /media/lan/rootfs

启动内核

插入sd卡上电启动设备,连接串口看到打印信息,串口波特率为1500000。
在出现 Hit any key to stop autoboot: 3 之后按回车进入uboot的命令行。

修改 bootcmd 和bootargs

setenv  bootargs console=ttyS2,1500000 earlyprintk root=/dev/mmcblk0p2 rootwait rw
setenv  bootcmd 'mmc dev 1;fatload mmc 1:1 02080000 Image;fatload mmc 1:1 01f00000 rk3328-orangepi-r1plus.dtb;booti 02080000 - 01f00000;'
saveenv
boot

这样就能启动系统里。

总结

至此就完成了整个系统的制作,如果制作过程中出现了什么问题,可以在下方留言。

构建orangePi r1 plus (RK3328)系统的整个过程相关推荐

  1. 用POLARDB构建客到智能餐饮系统实践

    在新零售成为大趋势的今天,餐饮行业也加入到这一浪潮之中.智能餐饮系统将帮助餐饮行业从多个维度提升自己的运营能力和收益,而打造智能餐饮系统SaaS化能力也成为了目前的一个热点.本文中果仁软件联合创始人& ...

  2. 基于Web SCADA平台构建数字化车间的MES系统

    数字化车间的MES系统与偏管理的信息化系统(如ERP.CRM.SRM等)最大的区别在于数据的"实时性",以传统的管理为主线的信息化系统因无法及时的将数据录入进系统,使得管理信息化中 ...

  3. 【原创】黑夜路人:如何构建更健壮的在线系统

    [原创]如何构建更健壮的在线系统 作者: 黑夜路人(heiyeluren) 时间:2020年11月 说明:本文主要面对PHP为主要开发语言的业务系统,Golang.Java等语言可以学习参考. 0.  ...

  4. ROS探索总结(十六)(十七)(十八)(十九)——HRMRP机器人的设计 构建完整的机器人应用系统 重读tf 如何配置机器人的导航功能

    ROS探索总结(十六)--HRMRP机器人的设计 1. HRMRP简介         HRMRP(Hybrid Real-time Mobile Robot Platform,混合实时移动机器人平台 ...

  5. 多点在线构建Noxmobi全球化精准营销系统

    摘要:大数据计算服务(MaxCompute,原名ODPS)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速 ...

  6. ubuntu系统debootstrap的使用(构建一套基本的系统)

    debootstrap是debian/ubuntu下的一个工具,用来构建一套基本的系统(根文件系统).生成的目录符合Linux文件系统标准(FHS),即包含了/boot./etc./bin./usr等 ...

  7. 嵌入式Linux设备驱动程序开发指南3(构建Microchip SAMA5D2嵌入式 Linux系统)——读书笔记

    构建Microchip SAMA5D2嵌入式 Linux系统 三.构建Microchip SAMA5D2嵌入式 Linux系统 3.1 获取驱动代码 3.2 配置编译 3.2.1 bootstrap编 ...

  8. 李孟:构建强健的DNS解析系统

    李孟:构建强健的DNS解析系统 在2013华东数据库技术大会上,李孟发表了主题为<构建强健的DNS解析系统>的精彩演讲.通过该文档,您可以了解到DNS架构特点.DNS系统的实现.以及蓝汛D ...

  9. Centos_7.2 下构建 Kafka_2.13 分布式消息系统的单机版

    如何在 Centos_7.2 下构建 Kafka_2.13 分布式消息系统的单例模式 一.前言 本文对于 kafka 分布式消息系统,是一个不错的入口点,首先从安装开始,这样就可以对 kafka 有一 ...

最新文章

  1. 使用SecureCRT脚本备份网络设备配置的一点感悟
  2. 在windows下安装Redis
  3. 如何绑定多个action到一个slot
  4. Android 使用fastboot烧录镜像
  5. nginx linux windows 忽略大小写_React 基础 在 Windows 下使用 React , 你需要注意这些问题...
  6. eclipse中ctrl+h默认打开是JavaSearch,怎么设置成默认打开是FileSearch
  7. linux svn 客户端安装配置
  8. 论.NET反射、委托与模式关系 zt- -
  9. 学习OO,实现的小跟堆代码
  10. 软件工程期末设计(校园教务系统)
  11. c# 多线程 执行事件 并发_阿里P9大牛对多线程并发问题的一些总结
  12. java get中文乱码怎么解决_java中get请求中文乱码怎么办?
  13. java jtable 单元格合并_JTable单元格合并AAA
  14. 计算机处理器性能排名,2018电脑英特尔处理器排名(cpu性能天梯图)
  15. 【转载】浅的不能再浅的浅谈百利金单双胡及全字尖
  16. win下连编socket时[Linker error] undefined reference to XXX
  17. 【LC刷题笔记】第四天:23+26+33(1-16)
  18. Materia Camera Mesh
  19. 【go项目-geecache】动手写分布式缓存 - day7 - 使用 Protobuf 通信
  20. linux pjsip 编译_Linux下移植pjsip使用QT开发

热门文章

  1. 海尔全球十一连冠背后: 生态时代的无限游戏
  2. html登录图片验证码的实现
  3. [转贴]馒头的N种吃法
  4. linux系统鼠标左键失灵,鼠标左键不灵敏如何修复 鼠标左键不灵敏解决方法【图文】...
  5. 2 VBA链接mysql数据库步骤和代码示例
  6. 西安市经开区-公司设立流程-公司名称审核
  7. 用计算机画有常数的函数图像,函数图像
  8. 0.96寸OLED12864屏幕控制(原理+代码)
  9. 题解 SP2916 【GSS5 - Can you answer these queries V】
  10. 如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?