rk3399移植linux kernel

rk3399移植linux kernel

  • 0.前言
  • 一、移植ubuntu根文件系统
  • 二、移植linux
    • 1.支持NFS(可选)
    • 2.配置uevent helper
    • 3.支持etx4文件系统(默认已支持)
    • 4.配置DRM驱动
    • 5.有线网卡驱动
    • 6.无线网卡驱动
  • 三、设备树
  • 四、内核镜像文件制作
  • 五、烧录
  • 六、总结


参考文章:
1.RK3399移植u-boot
2.I.MX6Q-SDB开发板移植ubuntu
3.Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统
4.Rockchip RK3399 - 移植uboot 2023.04 & linux 6.3

0.前言

  在前一节中移植了rk3399的u-boot,这一节就继续移植linux kernel。不过rk3399在移植kenel前,需要先制作根文件系统,这样才能在生成内核镜像文件Image时,将根文件系统的相关信息填入。

一、移植ubuntu根文件系统

  这里就不再赘述移植步骤,参考之前对i.mx6Q移植的步骤即可。不过有一些步骤略有不同,比如暂时先不配置串口的输出,后续启动板卡到u-boot界面再进行配置。另外,制作好的根文件系统需要打包成.img格式。这里就简述下打包步骤作为记录:
制作好的ubuntu根文件系统在ubuntu_base目录下,在同级目录下新建一个目录ubuntu_ext4_mount,用于挂载虚拟磁盘,并格式化成ext4格式:

mkdir ubuntu_ext4_mount
#挂载虚拟磁盘
sudo dd if=/dev/zero of=ubuntu_ext4.img bs=1M count=1300
#格式化
sudo mkfs.ext4 ubuntu_ext4.img
#挂载img镜像
sudo mount ubuntu_ext4.img ubuntu_ext4_mount/
#拷贝根文件系统
sudo cp ubuntu_base/* ubuntu_ext4_mount/ -af

其中count为根文件系统大小的2倍,可以使用du -h --max-depth=1命令查看目录大小。
之后就可以卸载并删除ubuntu_ext4_mount目录,然后检查下制作好的img即可:

umount ubuntu_ext4_mount
rm -rf ubuntu_rootfs
#用e2fsck修复及检测镜像文件系统
e2fsck -p -f ubuntu_ext4.img
#resize2fs减小镜像文件的大小
resize2fs -M ubuntu_ext4_rootfs.img

二、移植linux

官网下载地址:https://www.kernel.org/
镜像下载站:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/。
这里下载最新的linux-6.4.7并解压:

tar -xvf linux-6.4.7.tar.gz

修改顶层makefile中的目标平台及交叉编译链:
在这里插入图片描述
由于官方kernel只有一个默认配置,所以需要对其进行一些裁剪。

#配置文件存放位置
ll arch/arm64/configs/defconfig
#加载默认配置
make defconfig
#手动裁剪
make menuconfig

1.支持NFS(可选)

NFS为网络文件系统,如果后续需要对内核或文件系统进行开发,用NFS会更加方便,这里先勾选上。
在这里插入图片描述

2.配置uevent helper

该选项的作用是启用uevent helper程序的支持。uevent是内核与用户空间之间通信的一种方式,当内核检测到新的设备时,会生成一个uevent来通知用户空间,使得用户空间能够及时响应设备插拔事件,并做出相应的处理。其中, uevent helper程序就是在接收到uevent后执行的用户空间程序,用来完成设备的热插拔处理。
在这里插入图片描述

3.支持etx4文件系统(默认已支持)

在这里插入图片描述

4.配置DRM驱动

DRM,全称Direct Rending Manger。是目前Linux主流的图形显示框架,配置这个是为了后续支持带有桌面的ubuntu根文件系统。
在这里插入图片描述

5.有线网卡驱动

板子上带了一个RTL8111有线网卡,按照以下配置:
在这里插入图片描述
注:在6.4版本中STMicroelectronics 10/100/1000/EQOS Ethernet driver改成了STMicroelectronics Multi-Gigabit Ethernet driver。

6.无线网卡驱动

板载AP6236无线网卡,按照如下进行配置:

Device Drivers  ---> <*> Broadcom specific AMBA  ---> [*]   Support for BCMA on PCI-host bus (NEW)                                       [*]   Support for BCMA in a SoC                                             [*]   ChipCommon-attached serial flash support (NEW)                               [*]   BCMA Broadcom GBIT MAC COMMON core driver                                    [*]   BCMA GPIO driver

配置完保存即可。

三、设备树

这里笔者使用的设备树是从网上找到的反编译出的dts文件,可以直接拿来使用,所以就先略过。将该dts添加进dtb编译目录即可。

四、内核镜像文件制作

编译完成后会在arch/arm64/boot/文件夹下生成内核镜像文件Image.gz,因为mkimage是根据its文件中的描述来打包镜像生成itb文件(FIT uImage),所以首先需要制作一个its文件,在its文件中描述需要被打包的镜像,主要是kernel镜像,dtb文件等。
kernel.its:

/** Simple U-Boot uImage source file containing a single kernel and FDT blob*/
/dts-v1/;
/ {description = "Simple image with single Linux kernel and FDT blob";#address-cells = <1>;images {kernel {description = "Vanilla Linux kernel";data = /incbin/("arch/arm64/boot/Image.gz");type = "kernel";arch = "arm64";os = "linux";compression = "gzip";load = <0x280000>;entry = <0x280000>;hash-1 {algo = "crc32";};hash-2 {algo = "sha1";};};fdt {description = "Flattened Device Tree blob";data = /incbin/("arch/arm64/boot/dts/rockchip/rk3399_sw799.dtb");type = "flat_dt";arch = "arm64";compression = "none";load = <0x8300000>;entry = <0x8300000>;hash-1 {algo = "crc32";};hash-2 {algo = "sha1";};};};configurations {default = "conf-1";conf-1 {description = "Boot Linux kernel with FDT blob";kernel = "kernel";fdt = "fdt";};};
};

然后将u-boot-2023.07/tools/路径下的mkimage工具拷贝过来,使用mkimage工具编译即可:

cp u-boot-2023.07/tools/mkimage linux-6.4.7/
./mkimage -f kernel.its kernel.itb

五、烧录

相关文件已全部制作完毕,如果不需要在u-boot下进行功能开发,则使用前一节制作的u-boot即可。如有需要,由于较新版本的u-boot也分成了u-boot + 设备树dtb的方式,所以在编译u-boot时将相关设备树指定为自己板子的设备树进行编译即可。
rk3399烧录地址:

idbloader.img     --->     eMMC的0x40扇区
u-boot.itb        --->     0x4000扇区
kernel.itb        --->     0x8000扇区
ubuntu_ext4.img   --->     0x40000扇区

除了上述的几个文件,rk3399还需要一个rk3399_loader_v1.24.126.bin文件,这个文件在芯片启动时,会被加载到内部的sram中,用来初始化板载内存等基本外设。此文件从rockchip官方即可下载。
烧录工具有两种,一种是使用rockchip官方的RKDevTool,这个需要在windows环境下运行。另一种是使用rkdeveloptool,可以在linux下使用命令行进行烧录,具体的使用方式可以参考这篇文章,笔者使用的也是这种方式。将芯片进入Loader模式或Maskrom模式,然后使用以下命令将对应文件烧写到板卡上去:

rkdeveloptool db rkxx_loader_vx.xx.bin
rkdeveloptool wl 0x40 idbLoader.img
rkdeveloptool wl 0x4000 uboot.itb
rkdeveloptool wl 0x8000 boot.itb
rkdeveloptool wl 0x40000 ubuntu_ext4.img

六、总结

笔者制作的kernel中没有使能对应的GPU驱动,所以后续使用桌面显示的话会比较卡,且CPU占用较高,发热严重。所以最后笔者还是沿用了大佬移植的armbian系统(躺平真爽)。这里附上对应的镜像和工具下载地址,如果是同款SW799板子可以使用对应的镜像烧录使用,这里还有一些其他板子和一些简单教程,也可以借鉴一点。硬件就先玩到这里了,后面找点嵌入式小demo做做看看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/56826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx编译以及通过自定义生成证书配置https

1. 环境准备 1.1 软件安装 nginx安装编译安装以及配置https&#xff0c;需要gcc-c pcre-devel openssl openssl-devel软件。因此需要先安装相关软件。 yum -y install gcc-c pcre-devel openssl openssl-devel wgetopenssl/openssl-devel&#xff1a;主要用于nginx编译的htt…

程序员编写文档的 10 个技巧

编写好的文档在软件开发领域具有重大意义。文档是概述特定问题陈述、方法、功能、工作流程、架构、挑战和开发过程的书面数据或指令。文档可以让你全面了解解决方案的功能、安装和配置。 文档不仅是为其他人编写的&#xff0c;也是为自己编写的。它让我们自己知道我们以前做过什…

水果店小程序开发

水果店小程序是一款集合了多种实用功能的应用程序&#xff0c;旨在为用户提供方便快捷的购买水果的方式。以下是该小程序的主要功能介绍&#xff1a; 1. 水果浏览&#xff1a;用户可以通过小程序浏览水果店的所有水果产品。每个水果都有详细的介绍&#xff0c;包括产地、口感、…

C++类的定义和对象的创建

一、问题引入 C类和对象到底是什么意思&#xff1f; 1、C 中的类&#xff08;Class&#xff09;可以看做C语言中结构体&#xff08;Struct&#xff09;的升级版。结构体是一种构造类型&#xff0c;可以包含若干成员变量&#xff0c;每个成员变量的类型可以不同&#xff1b; …

electron+vue3全家桶+vite项目搭建【25】使用electron-updater自动更新应用

文章目录 引入实现效果实现步骤引入依赖配置electron-buidler文件封装版本升级工具类主进程调用版本更新校验渲染进程封装方法调用 测试版本更新 引入 demo项目地址 electron-updater官网 我们不可能每次发布新的版本都让用户去手动下载安装最新的包&#xff0c;而是应用可以…

再次斩获第一,文心3.5霸榜国内大模型

目录 1 什么是文心一言&#xff1f;2 体验与文心一言对话3 文心3.5霸榜国内大模型 1 什么是文心一言&#xff1f; 文心一言是百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动&#xff0c;回答问题&#xff0c;协助创作&#xf…

wxwidgets Ribbon使用wxRibbonToolBar实例

wxRibbonToolBar就是工具栏&#xff0c;一下是实现的效果&#xff0c;界面只是功能展示&#xff0c;没有美化 实现代码如下所示&#xff1a; MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600)) …

Python爬虫—破解JS加密的Cookie

前言 在进行网站数据爬取时&#xff0c;很多网站会使用JS加密来保护Cookie的安全性&#xff0c;而为了防止被网站反爬虫机制识别出来&#xff0c;我们通常需要使用代理IP来隐藏我们的真实IP地址。 本篇文章将介绍如何结合代理IP破解JS加密的Cookie&#xff0c;主要包括以下几个…

Acwing.876 快速幂求逆元

题目 给定n组ai ,pi&#xff0c;其中p;是质数,求α;模p;的乘法逆元&#xff0c;若逆元不存在则输出impossible。 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含一个数组ai, pi&#xff0c;数据保证p;是质数。 输出格式 输出共n行&#xff0c;每组数据输出一…

谈谈DNS是什么?它的作用以及工作流程

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、DNS是什么&#xff1f; 二、DNS的作用 三、DNS查询流程 1、查看浏览器缓存 2、查看系统缓存 3、查看路由器缓存 4、查看ISP …

STM32 DMA学习

DMA简称 DMA&#xff0c;Direct Memory Access&#xff0c;即直接存储器访问。DMA传输方式无需CPU直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场的过程&#xff0c;通过硬件为RAM与I/O设备开辟一条直接传送数据的通路&#xff0c;能使CPU的效率大为提高。…

Java私有仓库Nexus搭建部署

Java私有仓库Nexus搭建部署 需求分析 为什么要搭建部署Nexus私有仓库&#xff0c;有什么用&#xff0c;用来干什么&#xff0c;怎么用&#xff0c;也许是大家看到这篇文章的第一个反应和疑惑&#xff0c;这里给大家先笼统的做一个介绍&#xff1a; 依赖管理&#xff1a;在Java…