如何在Android系統上單編ko?

文章目錄

  • 一、先了解編譯驅動需要什么?
  • 二、配置makefile
    • 1、在Android系統編譯LOG上找到編譯器信息(一般都會打印出來)
    • 2、基于源MK構造 可獨立運行的makefile
    • 3)進入docker,在此makefile目錄下敲make
    • 4)最后根據項目不同 動態調整!
  • 三、源MK

一、先了解編譯驅動需要什么?

1、完整編譯kernel的環境,驅動編譯需要依賴kernel的生成物;
2、編譯器及編譯選項;
3、將所需環境變量配置在當前mk里;
注意只適用于ko模塊編譯

二、配置makefile

1、在Android系統編譯LOG上找到編譯器信息(一般都會打印出來)

如下
[2025-03-06T15:17:09.378Z] make -C /home/code/android/kernel/5.15_14 ARCH=arm CROSS_COMPILE=/home/code/android/prebuilts/mtk_toolchain/gcc-arm-linux-gnu-5.5.0-ubuntu/x86_64/bin/arm-linux-gnueabi- LOADADDR=0x20008000 NM=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-nm AR=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-ar LD=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/ld.lld OBJDUMP=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-objdump OBJCOPY=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-objcopy LLVM=1 LLVM_IAS=1 CC=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/clang O=/home/code/android/out/target/product/mt9633/obj/KERNEL_OBJ/5.15_14 BUILD_NUMBER= mtk_dtv_platform=mt5873 olddefconfig
[2025-03-06T15:17:09.378Z] make[2]: Entering directory ‘/home/code/android/kernel/5.15_14’
[2025-03-06T15:17:09.378Z] make[3]: Entering directory ‘/home/code/android/out/target/product/mt9633/obj/KERNEL_OBJ/5.15_14’

2、基于源MK構造 可獨立運行的makefile

ccflags-y += -DANDROID_PLATFORM
KDIR ?= /home/builder/code/android/out/target/product/mt9633/obj/KERNEL_OBJ/5.15_14
ARCH ?= arm
CROSS_COMPILE ?= /home/code/android/prebuilts/mtk_toolchain/gcc-arm-linux-gnu-5.5.0-ubuntu/x86_64/bin/arm-linux-gnueabi-
OTHER_PARAMS ?= LOADADDR=0x20008000 NM=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-nm AR=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-ar LD=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/ld.lld OBJDUMP=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-objdump OBJCOPY=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/llvm-objcopy LLVM=1 LLVM_IAS=1 CC=/home/code/android/kernel/build-master/prebuilts/clang/host/linux-x86/clang-r487747c/bin/clang

all: modules
modules:
make -C ( K D I R ) M = (KDIR) M= (KDIR)M=(PWD) ARCH= ( A R C H ) C R O S S C O M P I L E = (ARCH) CROSS_COMPILE= (ARCH)CROSSC?OMPILE=(CROSS_COMPILE) $(OTHER_PARAMS) modules
$(CROSS_COMPILE)strip --strip-debug aic8800_fdrv/aic8800_fdrv.ko
$(CROSS_COMPILE)strip --strip-unneeded aic8800_fdrv/aic8800_fdrv.ko
$(CROSS_COMPILE)strip --strip-debug aic_load_fw/aic_load_fw.ko
$(CROSS_COMPILE)strip --strip-unneeded aic_load_fw/aic_load_fw.ko

//$(CROSS_COMPILE)strip --strip-debug 裁剪ko,去掉冗余信息,由于Android系統會統一后處理,不會體現在單個模塊的mk里,需要加上

3)進入docker,在此makefile目錄下敲make

4)最后根據項目不同 動態調整!

三、源MK

CONFIG_AIC_LOADFW_SUPPORT := m
CONFIG_AIC8800_WLAN_SUPPORT := mobj-$(CONFIG_LOADFW_SUPPORT)    += load_fw/
obj-$(CONFIG_WLAN_SUPPORT) += fdrv/# Platform support list
CONFIG_PLATFORM_ROCKCHIP ?= n
CONFIG_PLATFORM_ALLWINNER ?= n
CONFIG_PLATFORM_AMLOGIC ?= y
CONFIG_PLATFORM_UBUNTU ?= nifeq ($(CONFIG_PLATFORM_ROCKCHIP), y)
#KDIR := /home/yaya/E/Rockchip/3229/Android7/RK3229_ANDROID7.1_v1.01_20170914/rk3229_Android7.1_v1.01_xml0914/kernel
#ARCH ?= arm
#CROSS_COMPILE ?= /home/yaya/E/Rockchip/3229/Android7/RK3229_ANDROID7.1_v1.01_20170914/rk3229_Android7.1_v1.01_xml0914/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
KDIR  := /home/yaya/E/Rockchip/3229/Android9/rk3229_android9.0_box/kernel
ARCH ?= arm
CROSS_COMPILE ?= /home/yaya/E/Rockchip/3229/Android9/rk3229_android9.0_box/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
#KDIR  := /home/yaya/E/Rockchip/3399/rk3399-android-10/kernel
#ARCH ?= arm64
#CROSS_COMPILE ?= /home/yaya/E/Rockchip/3399/rk3399-android-10/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
ccflags-y += -DANDROID_PLATFORM
endififeq ($(CONFIG_PLATFORM_ALLWINNER), y)
KDIR  := /home/yaya/E/Allwinner/R818/R818/AndroidQ/lichee/kernel/linux-4.9
ARCH ?= arm64
CROSS_COMPILE ?= /home/yaya/E/Allwinner/R818/R818/AndroidQ/lichee/out/gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
ccflags-y += -DANDROID_PLATFORM
endififeq ($(CONFIG_PLATFORM_AMLOGIC), y)
ccflags-y += -DANDROID_PLATFORM
ARCH := arm
CROSS_COMPILE := /home/yaya/D/Workspace/CyberQuantum/JinHaoYue/amls905x3/SDK/20191101-0tt-asop/android9.0/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androidkernel-
KDIR := /home/yaya/D/Workspace/CyberQuantum/JinHaoYue/amls905x3/SDK/20191101-0tt-asop/android9.0/out/target/product/u202/obj/KERNEL_OBJ/endififeq ($(CONFIG_PLATFORM_UBUNTU), y)
KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)
KVER := $(shell uname -r)
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
ARCH ?= x86_64
CROSS_COMPILE ?=
endifall: modules
modules:make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modulesinstall:mkdir -p $(MODDESTDIR)install -p -m 644 load_fw/fw.ko  $(MODDESTDIR)/install -p -m 644 fdrv/fdrv.ko  $(MODDESTDIR)//sbin/depmod -a ${KVER}uninstall:rm -rfv $(MODDESTDIR)/fw.korm -rfv $(MODDESTDIR)/fdrv.ko/sbin/depmod -a ${KVER}clean:cd aic_load_fw/;make clean;cd ..cd aic8800_fdrv/;make clean;cd ..rm -rf modules.order Module.symvers .tmp_versions/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76203.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Pandas】pandas DataFrame to_numpy

Pandas2.2 DataFrame Conversion 方法描述DataFrame.astype(dtype[, copy, errors])用于將 DataFrame 中的數據轉換為指定的數據類型DataFrame.convert_dtypes([infer_objects, …])用于將 DataFrame 中的數據類型轉換為更合適的類型DataFrame.infer_objects([copy])用于嘗試…

2025常用的ETL 產品推薦:助力企業激活數據價值

在當今數字化時代,企業面臨著海量數據的挑戰與機遇,ETL(Extract, Transform, Load)工具作為數據整合與分析的關鍵環節,其重要性日益凸顯。ETL 廠商眾多,各有優勢,本文將從多個維度進行分析&…

LeetCode算法題(Go語言實現)_37

題目 給你一棵以 root 為根的二叉樹,二叉樹中的交錯路徑定義如下: 選擇二叉樹中 任意 節點和一個方向(左或者右)。 如果前進方向為右,那么移動到當前節點的的右子節點,否則移動到它的左子節點。 改變前進方…

博途 TIA Portal之1200做從站與匯川EASY的TCP通訊

上篇我們寫到了博途做主站與匯川EASY的通訊。通訊操作起來很簡單,當然所謂的簡單,也是相對的,如果操作成功一次,那么后面就很容易了, 如果操作不成功,就會很遭心。本篇我們將1200做從站,與匯川EASY做主站進行TCP的通訊。 1、硬件準備 1200PLC一臺,帶調試助手的PC機一…

Mysql(繼續更新)

INnoDB 三特性 事務 外鍵 行級鎖(開啟事務時,查詢后加FOR UPDATE) MySQL 使用 InnoDB,在 默認隔離級別 —— REPEATABLE READ(可重復讀) 下 開啟事務,執行 UPDATE 時默認會加行鎖 只要事務沒有提交 這條數據會鎖住 …

[IOI 1994] 數字三角形 Number Triangles

題目鏈接 思路(上到下): ①從上往下遞推: f[i][j] max(f[i-1][j] g[i][j], f[i-1][j-1]g[i][j]) ②對最后一層,遍歷一下,找到最大的答案。 代碼(上到下): #inclu…

基于Qt的串口通信工具

程序介紹 該程序是一個基于Qt的串口通信工具,專用于ESP8266 WiFi模塊的AT指令配置與調試。主要功能包括: 1. 核心功能 串口通信:支持串口開關、參數配置(波特率、數據位、停止位、校驗位)及數據收發。 AT指令操作&a…

第5篇:Linux程序訪問控制FPGA端LEDR<三>

Q:如何具體設計.c程序代碼訪問控制FPGA端外設? A:以控制DE1-SoC開發板的LEDR為例的Linux .C程序代碼。頭文件fcntl.h和sys/mman.h用于使用/dev/mem文件,以及mmap和munmap內核函數;address_map_arm.h指定了DE1-SoC_Com…

【學生管理系統升級版】

學生管理系統升級版 需求分析:注冊功能:登錄功能:驗證碼規則:忘記密碼: 實操:系統主頁面注冊功能登錄功能忘記密碼效果演示 需求 為學生管理系統書寫一個登陸、注冊、忘記密碼的功能。 ? ? 只有用戶登錄成功之后&…

CSS Grid布局:從入門到放棄再到真香

Flexbox 與 Grid 布局:基礎概念與特點 Flexbox Flexbox(Flexible Box Layout),即彈性盒布局模型,主要用于創建一維布局,能夠輕松實現元素在一行或一列中的排列、對齊與分布。通過display: flex屬性啟用 Fl…

C++怎么調用類中的函數

1. 棧上對象 調用普通成員方法 普通成員方法需要通過類的對象實例&#xff08;或指針、引用&#xff09;來調用。 示例&#xff1a; class MyClass { public:void normalMethod() {std::cout << "普通成員方法被調用" << std::endl;} };int main() {M…

go游戲后端開發31:麻將游戲的碰牌與胡牌邏輯

以下是潤色后的版本&#xff1a; 1. 碰牌邏輯 1.1 觸發碰牌 當一個玩家棄牌后&#xff0c;其他玩家可以選擇碰牌。如果當前玩家決定碰牌&#xff0c;系統需要通知所有玩家這一操作。碰牌操作完成后&#xff0c;當前玩家需要出一張牌&#xff0c;系統同樣需要通知所有玩家。 …

十分鐘機器學習之--------------線性回歸

線性回歸&#xff08;linear regression&#xff09;是一種基于數學模型的算法&#xff0c;首先假設數據集與標簽之間存在線性關系&#xff0c;然后簡歷線性模型求解參數。在實際生活中&#xff0c;線性回歸算法因為其簡單容易計算&#xff0c;在統計學經濟學等領域都有廣泛的應…

學透Spring Boot — 017. 處理靜態文件

這是我的《學透Spring Boot》專欄的第17篇文章&#xff0c;了解更多內容請移步我的專欄&#xff1a; Postnull CSDN 學透 Spring Boot 目錄 靜態文件 靜態文件的默認位置 通過配置文件配置路徑 通過代碼配置路徑 靜態文件的自動配置 總結 靜態文件 以前的傳統MVC的項目…

深入理解 JavaScript 數組查找:如何高效獲取特定元素

深入理解 JavaScript 數組查找&#xff1a;如何高效獲取特定元素 深入理解 JavaScript 數組查找&#xff1a;如何高效獲取特定元素引言問題場景解決方案1. 使用 Array.prototype.find()2. 處理 Proxy 對象的情況3. 備選方案&#xff1a;Array.prototype.filter()4. 傳統 for 循…

HTML5+CSS3小實例:純CSS繪制七巧板

實例:純CSS繪制七巧板 技術棧:HTML+CSS 效果: 源碼: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale…

[electron]自動注冊IPC的解決方案

前言 主進程和渲染進程通過IPC進行通信&#xff0c;每次需要定義名稱并注冊&#xff0c;很多代碼都是重復書寫&#xff0c;并且如果主進程和渲染進程開發人員是同一個的話&#xff0c;很多東西都可以簡化。 渲染進程通過ipcRenderer.invoke與主進程通信&#xff0c;主進程通過i…

JS—防抖和節流:1分鐘掌握防抖和節流

個人博客&#xff1a;haichenyi.com。感謝關注 一. 目錄 一–目錄二–防抖三–節流四–進階應用五–總結 二. 防抖&#xff08;Debounce&#xff09; 防抖&#xff08;Debebounce&#xff09;和節流&#xff08;Throttle&#xff09;都是前端開發中用于優化高頻事件性能的兩…

測試模板1

本篇技術博文摘要 &#x1f31f; 引言 &#x1f4d8; 在這個變幻莫測、快速發展的技術時代&#xff0c;與時俱進是每個IT工程師的必修課。我是盛透側視攻城獅&#xff0c;一名什么都會一丟丟的網絡安全工程師&#xff0c;也是眾多技術社區的活躍成員以及多家大廠官方認可人員&a…

Nginx配置Http響應頭安全策略,未設置X-Content-Type-Options響應頭【原理掃描】

文章目錄 前言一、漏洞掃描問題二、漏洞描述三、解決方法3.1、Nginx配置概覽3.2、注意事項 四、感謝 前言 第三方安全檢測機構甩過來一篇漏洞掃描報告&#xff0c;需要我們整改。 一、漏洞掃描問題 漏洞掃描問題如下&#xff1a; 未設置X-Content-Type-Options響應頭【原理掃…