Rockchip Android13平台提取kernel环境编译KO_clang编译ko-程序员宅基地

技术标签: ko编译环境  GKI  linux  rockchip  RK3588  Android  

Rockchip Android13平台提取kernel环境编译KO

当需要给第三方提供kernel的ko编译环境时,又不想提供完整的kernel源码,则可以对kernel进行裁剪提取出最小的编译环境和编译器提供给第三方即可。

1. 编译器

Rockchip Android13平台kernel的编译器是clang,可以把android上面clang直接压缩包括,具体路径是:

prebuilts/clang/host/linux-x86/clang-r450784d

2. 下载一份完整的kernel源码,编进行GKI的ko编译

命令如下

export PATH=prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATH
make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 ARCH=arm64 gki_defconfig rockchip_gki.config  && make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 ARCH=arm64 rk3588-evb1-lp4-v10.img -j32

3. 成功编译后再进行裁剪

 find -name *.c | xargs rm
 find -name *.ko | xargs rm
 find -name *.img | xargs rm
 find -name *.o | xargs rm
 find -name *.a | xargs rm
 
 rm drivers/ -rf
 rm arch/arm64/boot/dts/rockchip/ -rf
 rm *.img
 rm arch/arm64/boot/dts/ -rf
 rm .git  -rf
 rm Documentation/ -rf
 rm vmlinux
 rm ./crypto/
 rm ./crypto/ -rf
 rm ./arch/arm64/boot
 rm ./arch/arm64/boot -rf
 rm net/ -rf
 rm sound/ -rf
 rm fs/ -rf
 rm tools/ -rf
 rm block/ -rf
 rm arch/arm/boot/ -rf
 rm kernel/ -rf
 rm samples/ -rf
 rm -rf security/
 rm -rf usr/
 rm -rf ipc/

4. 编译第三方KO

按以上步骤提取编译后面后,就可以进行第三方的驱动KO编译了。下面以hello.ko为例进行说明

  1. 在任意目录创建hello目录并创建hello.c和对应的Makefile

hello.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static int driver_all_init(void)
{
    
    printk("hello module\n");
    return 0;
}

static void driver_all_exit(void)
{
    
}

module_init(driver_all_init);
module_exit(driver_all_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("jiazh");
MODULE_DESCRIPTION("a hello module");

Makefile

obj-m := hello.o

KER= ../../kernel-5.10/

all:
	@rm -rf *.ko
	@make -C $(KER) M=$(PWD) modules
	@rm -rf *.mod* *.sym* .*.cmd *.order *.o

clean:
	@rm -rf *.ko
	@rm -rf *.mod* *.sym* .*.cmd *.order *.o

  1. 开始编译
    先在kernel目录下配置clang的编译器
export PATH=../prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATH
  1. 再进入hello目录下编译hello.ko
make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1  ARCH=arm64 -C ../../kernel-5.10 M=$PWD -j32
  1. 编译完成在hello目录下生成hello.ko
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43245753/article/details/129627787

智能推荐

电路基础(2)电阻电路的等效变换-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏20次。电路基础(2)电阻电路的等效变换_电阻电路的等效变换

JS前端获取上传文件的大小的方法-程序员宅基地

文章浏览阅读818次。WEB应用中,经常会遇到上传附件的问题,比如有时候会有限制附件大小的需求。那么如何去判断附件的大小呢? 方法如下:(遗憾的IE中只能判断出图片文件的大小) &lt;html&gt; &lt;head&gt; &lt;title&gt;JS获取文件大小 &lt;/title&gt; &lt;script type='text/javascript'&gt; ..._js ios 上传时获取不到文件的大小

Apache的参数设置_org.apache.johnzon.max-string-length-程序员宅基地

文章浏览阅读3.4k次。以prefork模式为例来说明参数的设置,其缺省设置一般如下: ServerLimit 2000 StartServers 5 MinSpareServers 5 MaxSpareServers 10 _org.apache.johnzon.max-string-length

Wireshark_window size是发送窗口还是接收窗口-程序员宅基地

文章浏览阅读783次,点赞16次,收藏24次。wireshark抓HTTP包。_window size是发送窗口还是接收窗口

Nginx日志切割 手动+定时两种方式 非常详细_nginx 定时任务-程序员宅基地

文章浏览阅读1.2k次。Nginx日志切割 手动+定时两种方式 非常详细_nginx 定时任务

在Linux上使用yolov7训练自己的数据集【从零开始的教程】_yolov7的数据集格式-程序员宅基地

文章浏览阅读632次。yolov7的文件夹打开之后是这个样子啦以下是三个常见已经标注好的yolo格式数据集会按照以下格式进行存放train.txtval.txt网上有很多几种格式互相转换的教程。_yolov7的数据集格式

随便推点

面向对象编程设计模式——总述_面向对象编程的经典模式-程序员宅基地

文章浏览阅读231次。软件设计模式的产生背景“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1979 年他的另一部_面向对象编程的经典模式

机器学习库sklearn之怎么划分训练集和测试集_以下划分训练集和测试集x_train、y_train训练集;x_test、y_test测试集-程序员宅基地

文章浏览阅读4.5w次,点赞22次,收藏133次。sklearn是很强大的机器学习的库,传统的机器学习任务从开始到建模的一般流程是:获取数据 -&gt; 数据预处理 -&gt; 训练建模 -&gt; 模型评估 -&gt; 预测,分类。最开始的是获取数据,sklearn已经给出很多的数据集, 当然也可以通过sklearn自己创建。Sklearn里给出的数据集如下:这里具体怎么调用和创建可以参考博客:https://www.cnblo..._以下划分训练集和测试集x_train、y_train训练集;x_test、y_test测试集

【论文笔记_自监督知识蒸馏】Refine Myself by Teaching Myself : Feature Refinement via Self-Knowledge Distillation_frskd-程序员宅基地

文章浏览阅读3.7k次,点赞4次,收藏17次。通过自学来完善自己:基于自知识蒸馏的特征提取作者:Mingi Ji, Seungjae Shin, Seunghyun Hwang, Gibeom Park1Il-Chul Moon摘要知识提取是一种将知识从预先训练的复杂教师模型转移到学生模型的方法,因此在部署阶段,较小的网络可以取代较大的教师网络。为了减少培训大型教师模型的必要性,最近的文献介绍了一种自我知识蒸馏方法,该方法在没有预先培训的教师网络的情况下,逐步训练学生网络提取自己的知识。虽然自知识蒸馏在很大程度上分为基于数据增强的方法和基于辅助_frskd

PHP实现的封装验证码类详解及实例代码_php生成验证码代码-程序员宅基地

文章浏览阅读115次。通过封装验证码类,我们可以方便地生成验证码、输出验证码图像和验证用户输入的验证码。在PHP中,我们可以通过封装一个验证码类来实现验证码的生成和验证功能。这个类将包含生成验证码、输出验证码图像和验证用户输入的验证码等方法。的类,其中包含了生成验证码、创建图像资源、绘制验证码图像、输出验证码图像和验证用户输入的验证码等方法。在这个方法中,我们使用了包含数字和字母的字符集,通过随机选择字符来生成验证码。通过上述步骤,我们可以实现一个基本的验证码功能,并且可以在需要验证用户身份的地方使用它。方法绘制验证码图像。_php生成验证码代码

org.mockito.exceptions.misusing.MissingMethodInvocationException-程序员宅基地

文章浏览阅读1.3w次。powermock 常遇到的问题之一,如果你需要mock一个静态方法,可能你会发现抛出如下异常org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'.For exa..._org.mockito.exceptions.misusing.missingmethodinvocationexception: when() req

proto unmarshal失败的问题_proto.unmarshal-程序员宅基地

文章浏览阅读1.3k次。239 191 189_proto.unmarshal

推荐文章

热门文章

相关标签