rk3399移植linux kernel

news2024/11/26 16:34:38

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.coloradmin.cn/o/844605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL变量(二十七)

二八佳人体似酥&#xff0c;腰悬利剑斩愚夫&#xff0c;虽然不见人头落,暗里教君骨髓枯。 一. 变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为系…

leetcode每日一练-第278题-第一个错误的版本

一、思路 二分查找——因为它可以快速地将版本范围缩小一半&#xff0c;从而更快地找到第一个坏版本。 二、解题方法 维护一个左边界 left 和一个右边界 right&#xff0c;在每一步循环中&#xff0c;我们计算中间版本 mid&#xff0c;然后检查它是否是坏版本。如果是坏版本…

【UE】AI导航,多个导航物体无法走到同一终点问题

如不需要开启导航物体的碰撞&#xff0c;则需要关闭Use RVOAvoidance 不然会导致多个导航物体无法到达同一个目标点&#xff0c;都在附近晃。无法结束寻路。 ue小白&#xff0c;判定导航终点的半径&#xff0c;没有找到。如果有大佬知道怎么设置请在评论区指出&#xff0c;谢…

Linux mmap系统调用视角看缺页中断

问题 1. mmap具体是怎么实现比read/write少一次内存copy的 2.mmap共享映射和私有映射在内核实现的时候到底有什么区别 3.mmap的文件映射和匿名映射在内核实现的时候到底有什么区别 4.父子进程的COW具体怎么实现的 概述 实际开发过程中经常使用或者看到mmap函数&#xff0…

实力认证!TDengine 入选 Gartner 中国数据分析与人工智能技术成熟度曲线

近日&#xff0c;国际权威研究机构 Gartner 发布了《2023 年中国数据分析及人工智能技术成熟度曲线》&#xff08;即《Hype Cycle for Data, Analytics and AI in China, 2023》&#xff09;报告&#xff0c;TDengine 成功入选实时数据管理领域代表产品。 作为评估全球新技术成…

HPRNet: Whole-Body 2D 姿态估计

HPRNet: Hierarchical Point Regression for Whole-Body Human Pose Estimation解析 摘要1. 简介2. Related Work2.1 Human Body Pose Estimation2.2 Whole-body Pose Estimation 3. Model3.1 全身关键点的层次回归3.2 足部关键点回归3.3 网络架构3.4 目标函数PCH and BKH >…

【MFC】05.MFC第一大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单&#xff0c;但是对于我们逆向人员来说&#xff0c;如果想要逆向MFC程序&#xff0c;那么我们就必须了解它背后的机制&#xff0c;这样我们才能够清晰地逆向出MFC程序&#xff0c;今天这篇文章就来带领大家了解MFC的第一大机制&#xff1a;程序启动机…

《向量数据库指南》——Rockset 为实时数据库添加向量嵌入支持(一)

2023年4月18日,数据库供应商 Rockset 公布了对向量嵌入的支持,此举旨在使用户能够实时搜索和操作任何类型的数据。 位于加利福尼亚州圣马特奥的 Rockset 以前支持结构化和半结构化数据,让用户可以使用 SQL 和 NoSQL 实时搜索和分析数据。 现在,通过增加对向量嵌入的支持…

海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)

一、项目背景 需求:需要在公司的产品里集成海康威视摄像头的SDK,用于控制海康威视的摄像头。 拍照抓图、视频录制、云台控制、视频实时预览等等功能。 开发环境: windows-X64(系统) + Qt5.12.6(Qt版本) + MSVC2017_X64(使用的编译器) 海康威视提供了设备网络SDK,设备网…

2023暑假牛客多校6- E.Sequence

题目描述 You have an array of elements . For each task, you have three integers . Ask whether you can find an array of integers satisfy: are the multiplies of 2 Specially, if , it should satisfy is the multiply of 2 We define . If possible, print…

Java虚拟机怎样设置CLASSPATH的环境变量?

CLASSPATH环境变量用于保存一系列类包的路径&#xff0c;它和PATH环境变量的查看与配置方式完全相同。当Java虚拟机需要运行一个类时&#xff0c;会在CLASSPATH环境变量定义的路径下寻找所需的.class文件和类包。 为了让Java虚拟机能找到所需的class文件&#xff0c;就需要对C…

模拟实现消息队列项目(系列3) -- 服务器模块(硬盘管理)

目录 前言 1. 创建项目 2. 创建核心类 2.1 Exchange 2.2 MSQueue 2.3 Binding 2.4 Message 3. 数据库设计 3.1 SQLite 配置 3.2 Mapper层代码实现 3.2.1 创建表操作 3.2.2 交换机 队列 绑定的增加和删除 3.3 实现DataBaseManager 3.4 DataBaseManager单元测试 4.…

【JS】实现系统取色器

效果 使用环境说明 根据当前的信息&#xff0c;截至到 2023 年 8 月&#xff0c;以下是一些支持使用 new EyeDropper() 的主要浏览器&#xff08;可能还有其他浏览器也提供了类似的功能&#xff09;&#xff1a; Google Chrome&#xff1a;从 Chrome 94 版本开始引入了 new Ey…

Linux下共享windows 一键搞定

编写脚本 [rootlocalhost ~]# vim dd.sh#!/bin/bash yum -y install samba mkdir -p /home/shar sss dddecho " [share]comment Shared Folderpath /homebrowseable yeswritable yesguest ok yes " > /etc/samba/smb.confchmod x /home/* useradd qqqq s…

Qgis核密度分析

不建议使用Qgis进行核密度分析&#xff0c;建议使用arcgis&#xff0c;arcgis更简单。 arcgis核密度分析 Qgis核密度分析有两种&#xff1a; 法一:符号化&#xff0c;热图。 缺点&#xff1a;使用不方便&#xff0c;只适合看一下效果。 法二&#xff1a;工具栏搜索&#xff…

linux和C++中的 线程同步与线程安全 对比

线程同步与线程安全 线程进程与线程的区别并发和并行的区别linux线程常用接口函数函数定义函数使用 多线程理解 线程同步五个线程同时启动&#xff0c;每一个循环打印3次五个线程&#xff0c;每一个循环1000 结果是<5000代码和测试结果测试结果分析可以用信号量和互斥锁解决…

C语言标准定义的32个关键字

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。 …

PyTorch搭建神经网络

PyTorch版本&#xff1a;1.12.1PyTorch官方文档PyTorch中文文档 PyTorch中搭建并训练一个神经网络分为以下几步&#xff1a; 定义神经网络定义损失函数以及优化器训练&#xff1a;反向传播、梯度下降 下面以LeNet-5为例&#xff0c;搭建一个卷积神经网络用于手写数字识别。 …

日志分析和流量分析

目录 [陇剑杯 2021]日志分析&#xff08;问1&#xff09; [陇剑杯 2021]日志分析&#xff08;问2&#xff09; [陇剑杯 2021]日志分析&#xff08;问3&#xff09; [陇剑杯 2021]简单日志分析&#xff08;问1&#xff09; [陇剑杯 2021]简单日志分析&#xff08;问3&#…

智慧水利整体解决方案[43页PPT]

导读&#xff1a;原文《智慧水利整体解决方案[43页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完整的…