RK3568筆記三十三: helloworld 驅動測試

若該文為原創文章,轉載請注明原文出處。

報著學習態度,接下來學習驅動是如何使用的,從簡單的helloworld驅動學習起。

開始編寫第一個驅動程序—helloworld 驅動。

一、環境

1、開發板:正點原子的ATK-DLRK3568
2、系統: buildroot
3、內核:正點原子提供的虛擬機和rk3568_linux_sdk

二、驅動的基本框架

Linux 驅動的基本框架主要由模塊加載函數,模塊卸載函數,模塊許可證聲明,模塊參數, 模塊導出符號,模塊作者信息等幾部分組成,其中模塊參數,模塊導出符號,模塊作者信息是 可選的部分,也就是可要可不要。剩余部分是必須有的。
1. 模塊加載函數
當使用加載驅動模塊時,內核會執行模塊加載函數,完成模塊加載函數中的初始化工作。
2.模塊卸載函數
當卸載某模塊時,內核會執行模塊卸載函數,完成模塊卸載函數中的退出工作。
3.模塊許可證聲明
許可證聲明描述了內核模塊的許可權限,如果不聲明模塊許可,模塊在加載的時候,會收到“內核被污染(kernel tainted)”的警告。可接受的內核模塊聲明許可包括“GPL”“GPL v2”。
4.模塊參數(可選擇)
模塊參數是模塊被加載的時候可以傳遞給它的值。
5.模塊導出符號(可選擇)
內核模塊可以導出的符號,如果導出,其他模塊可以使用本模塊中的變量或函數。
6.模塊作者信息等說明(可選擇)

三、helloworld 驅動代碼

#include <linux/module.h>
#include <linux/kernel.h>static int __init helloworld_init(void) //驅動入口函數
{printk(KERN_EMERG "helloworld_init\r\n");//注意:內核打印用 printk 而不是 printfreturn 0;
}static void __exit helloworld_exit(void) //驅動出口函數
{printk(KERN_EMERG "helloworld_exit\r\n");
}module_init(helloworld_init); //注冊入口函數module_exit(helloworld_exit); //注冊出口函數MODULE_LICENSE("GPL v2"); //同意 GPL 開源協議MODULE_AUTHOR("yifeng"); //作者信息

根據驅動的基本框架,編寫了最簡單的helloworld程序,加載驅動和卸載驅動時直接打印信息。

編譯驅動需要內核代碼,環境自行編譯。

根據正點原子的手冊編譯需要設置環境變量,這里直接填寫到makefile里

makefile:

# 內核目錄
KERNELDIR := /home/alientek/rk3568_linux_sdk/kernel
# rk3568是arm64架構
ARCH=arm64
# 交叉工具鏈
CROSS_COMPILE=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-
export  ARCH  CROSS_COMPILECURRENT_PATH := $(shell pwd)
obj-m := helloworld.obuild: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

在這里插入圖片描述直接make會生成helloworld.ko文件 ,這就是編譯生成的內核驅動模塊

四、測試

啟動開發板,把生成的helloworld.ko文件拷貝到板子上。

加載ko文件

insmod helloworld.ko

在這里插入圖片描述

查看當前加載的內核模塊

lsmod

在這里插入圖片描述
查看當前系統中有沒有 helloworld這個設備

cat /proc/devices

結果查詢不到,因為沒注冊。

卸載驅動模塊

rmmod helloworld.ko

在這里插入圖片描述

這個模塊是最基礎的模板,下面大部分驅動都以此模板編寫。

如有侵權,或需要完整代碼,請及時聯系博主。

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

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

相關文章

d3dcompiler_43.dll文件是什么?如何快速有效的解決d3dcompiler_43.dll文件丟失問題

dcompiler_43.dll 是一個Windows系統中的系統文件&#xff0c;屬于DirectX軟件的一部分。這個dcompiler_43.dll&#xff08;動態鏈接庫&#xff09;文件主要用于處理與3D圖形編程有關的任務&#xff0c;是運行許多游戲和高級圖形程序必需的組件之一。那么如果電腦丟失d3dcompil…

香蕉派BPI-Wifi6迷你路由器公開發售

Banana Pi BPI-Wifi6 Mini 公開發售。 Banana Pi BPI-Wifi6 Mini 開源路由器采用Triductor TR6560 TR5220 wifi SOC設計&#xff0c;是一款迷你尺寸的wifi6路由器解決方案。內置高性能雙核ARM Cortec A9處理器用于WIFI報文轉發或智能業務處理&#xff0c;內置高性能LSW和硬件N…

[NeetCode150] String Encode and Decode

String Encode and Decode Design an algorithm to encode a list of strings to a single string. The encoded string is then decoded back to the original list of strings. Please implement encode and decode Example 1: Input: [“neet”,“code”,“love”,“you…

ubuntu 上vscode +cmake的debug調試配置方法

在ubuntu配置pcl點云庫以及opencv庫的時候&#xff0c;需要在CMakeLists.txt中加入相應的代碼。配置完成后&#xff0c;無法調試&#xff0c;與在windows上體驗vs studio差別有點大。 找了好多調試debug配置方法&#xff0c;最終能用的有幾種&#xff0c;但是有一種特別好用&a…

ubuntu部署minio集群

minio集群介紹 官方文檔&#xff1a;https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html 本方案采用在多節點多驅動器 (MNMD) 或“分布式”配置部署 MinIO。 MNMD 部署提供企業級性能、可用??性和可擴展性&#…

jmeter-beanshell學習4-beanshell截取字符串

再寫個簡單點的東西&#xff0c;截取字符串&#xff0c;參數化文件統一用csv&#xff0c;然后還要用excel打開&#xff0c;如果是數字很容易格式就亂了。有同事是用雙引號把數字引起來&#xff0c;報文里就不用加引號了&#xff0c;但是這樣beanshell處理起來&#xff0c;好像容…

Facebook社交平臺的未來發展趨勢分析

隨著科技和社交需求的不斷演變&#xff0c;Facebook作為全球最大的社交平臺之一&#xff0c;其未來發展的趨勢備受關注。從技術創新到社會影響&#xff0c;Facebook正在經歷著前所未有的變化和挑戰。本文將探討Facebook未來發展的幾個關鍵趨勢&#xff0c;并分析其可能的影響和…

[Linux][Shell][Shell變量]詳細講解

目錄 1.本地變量2.變量定義3.取出變量值4.特殊變量5.特殊狀態變量6.shell內置的變量命令1.echo2.eval3.exec 7.截取字符串8.特殊shell擴展變量處理1.語法2.應用場景 1.本地變量 定義Shell變量&#xff0c;變量名不需要加$本地變量只在?戶當前shell?存期中有效 2.變量定義 變…

SpringBoot防止重復提交 AOP+自定義注解+redis

1.什么是重復提交呢 在Web開發中&#xff0c;重復提交&#xff08;也稱為雙重提交或重復表單提交&#xff09;是指用戶在沒有明確意圖的情況下&#xff0c;多次提交同一表單的情況。這可能是由于用戶多次點擊提交按鈕、表單提交過程中的網絡延遲導致用戶重復點擊、或者由于瀏覽…

雙向全橋隔離dc-dc變換器(DAB)

DAB(dual active bridge) 雙向全橋隔離dc-dc變換器&#xff08;DAB&#xff09;和Buck/Boost不同&#xff0c;該變換器通過交流電感進行功率傳輸&#xff0c;其調制和控制不適合直接借鑒已有的研究。 調制挑戰&#xff1a;開關網絡相對復雜&#xff0c;調制自由度較多&#x…

揭秘SQL Server數據庫選項:性能與行為的調控者

揭秘SQL Server數據庫選項&#xff1a;性能與行為的調控者 在SQL Server的世界中&#xff0c;數據庫選項是那些可以調整以優化數據庫性能和行為的設置。它們是數據庫管理員和開發者的得力助手&#xff0c;通過精細調控&#xff0c;可以顯著提升數據庫的響應速度和資源利用率。…

MySQL MVCC

總結自小林coding&#xff0c;bojiangzhou 臟讀、不可重復讀、幻讀 說的都是并發讀取的問題&#xff0c;最簡單的方式就是給記錄加一把鎖&#xff0c;不管是更新、讀取記錄都需要競爭到這把鎖之后才能操作。但這種方式的并發性能可想而知會有多么低。 于是 InnoDB 就設計了MVC…

C#——二進制流序列化和反序列化

C#二進制流序列化和反序列化 在C#中&#xff0c;可以使用BinaryFormatter來進行二進制的序列化和反序列化。 首先&#xff0c;定義一個可序列化的類 [Serializable] public class MyObject {public int IntProperty { get; set; }public string StringProperty { get; set; …

ubuntu 上配置開機自動啟動ssh

一般安裝了就會自動啟動。但是各種rc.local, cron都測試了一下&#xff0c;還是這個systemd有效 使用 systemd 服務 創建文件 sudo nano /etc/systemd/system/custom-ssh.service [Unit] DescriptionStart SSH service at boot Afternetwork.target[Service] ExecStart/usr/…

軟件開發(續).NET框架

1.解釋一下.NET框架中的CLR&#xff08;公共語言運行時&#xff09;是什么&#xff0c;以及它的作用和功能是什么&#xff1f; CLR&#xff08;Common Language Runtime&#xff09;的概念和作用 在.NET框架中&#xff0c;CLR&#xff08;Common Language Runtime&#xff09…

代碼優化(2)——小程序登錄

驗證身份的時候&#xff0c;依賴的是cookie里面的token $this->request->server(HTTP_TOKEN,$this->request->request(token, \think\Cookie::get(token))) 小程序的交互權限驗證&#xff0c;一般放到header里面進行鑒權&#xff0c;極少是通過cookie來傳遞參數驗證…

一起來了解深度學習中的“梯度”

文章目錄 前言一、什么是梯度&#xff1f;二、梯度計算三、優化算法四、示例五、梯度的作用六、形象化解釋七、如果完全不懂公式可以實現這個算法嗎&#xff1f;1. 使用 Hugging Face Transformers 實現深度學習任務1) 安裝庫2) 加載預訓練模型和分詞器3) 準備數據4) 進行推理5…

LeetCode HOT100(二)雙指針

移動0 給定一個數組 nums&#xff0c;編寫一個函數將所有 0 移動到數組的末尾&#xff0c;同時保持非零元素的相對順序。 請注意 &#xff0c;必須在不復制數組的情況下原地對數組進行操作。 輸入: nums [0,1,0,3,12] 輸出: [1,3,12,0,0] 解法1&#xff1a;雙指針交換 指針L&…

“論基于構件的軟件開發方法及其應用”寫作框架,軟考高級論文,系統架構設計師論文

論文真題 基于構作的軟件開發 (Component-Based Software Development&#xff0c;CBSD) 是一種基于分布對象技術、強調通過可復用構件設計與構造軟件系統的軟件復用途徑。基于構件的軟件系統中的構件可以是COTS &#xff08;Commercial-Off-the-Shelf&#xff09;構件&#x…

Spring Boot輕松整合Minio實現文件上傳下載功能

一、Linux 安裝Minio 安裝 在/root/xxkfz/soft目錄下面創建文件minio文件夾&#xff0c;進入minio文件夾&#xff0c;并創建data目錄&#xff1b; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data 執行如下命令進行下載 [rootxx…