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.rhkb.cn/news/81238.html

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

相关文章

python高阶技巧

目录 设计模式 单例模式 具体用法 工厂模式 优点 闭包 案例 修改闭包外部变量 闭包优缺点 装饰器 装饰器原理 装饰器写法 递归 递归的调用过程 递归的优缺点 用递归计算阶乘 设计模式 含义&#xff1a;设计模式是一种编程套路&#xff0c;通过这种编程套路可…

数字员工助力农行安全生产数字化转型应用实践

党的二十大指出&#xff0c;“以数字中国建设助力中国式现代化&#xff0c;加快建设网络强国、数字中国”&#xff0c;2022年1月发布《“十四五”数字经济发展规划》提出&#xff0c;加强类人智能、自然交互与虚拟现实等技术研究。近年来&#xff0c;各大银行纷纷推出自己的数字…

2023年8月份华为H12-811更新了

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…

python简单的病毒编程代码,如何用python做恶搞病毒

这篇文章主要介绍了python简单的病毒编程代码&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 相信各位好奇心重的朋友们,特别是接触过爬虫的朋友们都想试一试如何做一个爬虫,别…

git使用(常见用法)

一.下载git git官方下载跳转 安装简单,有手就行 二. git的简单使用 1. 连接远程仓库 #初始化 git init #配置账户 git config --global user.name “输入你的用户名” git config --global user.email “输入你的邮箱” git config --list #--q退出 #配置验证邮箱 ssh-key…

2023.8.7论文阅读

文章目录 CMUNeXt: An Efficient Medical Image Segmentation Network based on Large Kernel and Skip Fusion摘要本文方法实验结果 Boundary Difference Over Union Loss For Medical Image Segmentation&#xff08;损失函数&#xff09;摘要本文方法实验结果 CMUNeXt: An E…

ASP.NET Core学习路线图

说明 1. 先决条件 - [C#](https://www.pluralsight.com/paths/csharp) - [Entity Framework](https://www.pluralsight.com/search?qentity%20framework%20core) - [ASP.NET Core](https://www.pluralsight.com/search?qasp.net%20core) - SQL基础知识 2. 通用开发技能 -…

[每周一更]-(第57期):用Docker、Docker-compose部署一个完整的前后端go+vue分离项目

文章目录 1.参考项目2.技能点3.GO的Dockerfile配置后端的结构如图Dockerfile先手动docker调试服务是否可以启动报错 4.Vue的Dockerfile配置前端的结构如图nginx_docker.confDockerfile构建 5.docker-compose 整合前后端docker-compose.yml错误记录&#xff08;1&#xff09;ip端…

1. Git基础知识

文章目录 Git基础知识一、集中式与分布式二、中心服务器三、工作流四、分支实现五、冲突六、Fast forward七、储藏&#xff08;Stashing&#xff09;八、SSH 传输设置九、.gitignore 文件十、Git 命令一览十一、和远端仓库交互 Git基础知识 一、集中式与分布式 Git 属于分布式…

【机器学习 | 决策树】利用数据的潜力:用决策树解锁洞察力

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

QT充当客户端模拟浏览器等第三方客户端对https进行双向验证

在 ssl单向证书和双向证书校验测试及搭建流程 文章中&#xff0c;已经做了基于https的单向认证和双向认证&#xff0c;&#xff0c;&#xff0c; 在进行双向认证时&#xff0c;采用的是curl工具或浏览器充当客户端去验证。 此次采用QT提供的接口去开发客户端向服务器发送请求&a…

Wavefront .OBJ文件格式解读【3D】

OBJ&#xff08;或 .OBJ&#xff09;是一种几何定义文件格式&#xff0c;最初由 Wavefront Technologies 为其高级可视化器动画包开发。 该文件格式是开放的&#xff0c;已被其他 3D 图形应用程序供应商采用。 OBJ 文件格式是一种简单的数据格式&#xff0c;仅表示 3D 几何体&…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法你有多牛逼-下

1.简介 Fiddler是一款强大的HTTP抓包工具&#xff0c;它能记录所有客户端和服务器的http和https请求&#xff0c;允许你监视&#xff0c;设置断点&#xff0c;甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说&#xff0c;都有很大的帮助。Fiddler提供的功能基本上能…

SpringMVC的架构有什么优势?——表单和数据校验(四)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

51单片机学习--DS18B20温度读取温度报警器

需要先编写OneWire模块&#xff0c;再在DS18B20模块中调用OneWire模块的函数 先根据原理图做好端口的声明&#xff1a; sbit OneWire_DQ P3^7;接下来像之前一样把时序结构用代码模拟出来&#xff1a; unsigned char OneWire_Init(void) {unsigned char i;unsigned char Ac…

JVM之类加载与字节码(一)

1.类文件结构 一个简单的HelloWorld.Java package cn.itcast.jvm.t5; // HelloWorld 示例 public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); } }编译为 HelloWorld.class 后的样子如下所示&#xff1a; […

ChatGPT发展到了什么程度?代码生成,程序员将被取代?

前言 ChatGPT 是一个基于人工智能的聊天机器人&#xff0c;由 OpenAI 开发。ChatGPT 的历史可以追溯到早期的语言模型&#xff0c;例如循环神经网络 (RNN) 和长短时记忆网络 (LSTM)。如今的 ChatGPT-3 则是最新的版本。 ChatGPT发展到了什么程度&#xff1f;代码生成&#xff0…

自动化处理,web自动化测试处理多窗口+切换iframe框架页总结(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 web 自动化之处理…

【高级程序设计语言C++】红黑树

1. 红黑树的概念2. 红黑树的插入2.1. 情况12.2. 情况22.3. 情况32.4. 插入情况小总结 3. 红黑树与AVL树的对比4. 红黑树在线生成网站 1. 红黑树的概念 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树&#xff0c;它在插入和删除操作时通过调整节点的颜…

Scrum是什么意思,Scrum敏捷项目管理工具有哪些?

一、什么是Scrum&#xff1f; Scrum是一种敏捷项目管理方法&#xff0c;旨在帮助团队高效地开展软件开发和项目管理工作。 Scrum强调迭代和增量开发&#xff0c;通过将项目分解为多个短期的开发周期&#xff08;称为Sprint&#xff09;&#xff0c;团队可以更好地应对需求变…