1. 程式人生 > >嵌入式Linux最簡單驅動模組編譯與剖析

嵌入式Linux最簡單驅動模組編譯與剖析

# 最簡單的核心模組: #include<linux/module.h> #include<linux/kernel.h> static int my_driver_init(void) { printk("hello\n"); return 0; } static my_driver_exit(void) { printk("byebye\n"); } module_init(my_driver_init); module_exit(my_driver)_exit); MODULE_AUTHOR("hanshanjie"); MODULE_LICENSE("GPL"); 其中,module_init()表名模組的入口,該函式在模組載入時候被呼叫,即insmod,modprobe時候被呼叫。該函式指定的函式,試分析一個驅動最先關注的,類似於main函式。 Makefile編寫: CROSS_COMPILE ?= CC = $(CROSS_COMPILE)gcc obj-m := hello.o KERNELDIR = PWD := $(shell pwd) deafult: $(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=arm CROSS_COMPILE= modules clean: $(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=arm CROSS_COMPILE= clean rm -f *.ko *.mod *.symvers *~*.order 實際編譯時候: make -C /home/parallels/work31017/kernel_source/3.10.17-r0/ M=/home/parallels/work31017/helloko/ ARCH=arm CROSS_COMPILE=/opt/poky/1.5.3/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- modules 過程: make: Entering directory `/home/parallels/work31017/kernel_source/3.10.17-r0' CC [M] /home/parallels/work31017/helloko/hello.o Building modules, stage 2. MODPOST 1 modules CC /home/parallels/work31017/helloko/hello.mod.o LD [M] /home/parallels/work31017/helloko/hello.ko make: Leaving directory `/home/parallels/work31017/kernel_source/3.10.17-r0'生成: hello.ko hello.mod.c hello.mod.o hello.o Makefile modules.order Module.symver 安裝驅動:insmod 顯示hello 解除安裝驅動 rmmod 顯示byebye

相關推薦

嵌入式Linux簡單驅動模組編譯剖析

# 最簡單的核心模組: #include<linux/module.h> #include<linux/kernel.h> static int my_driver_init(void) { printk("hello\n"); return

linux核心外部驅動模組編譯報錯ERROR: "******" [drivers/**.ko] undefined!

我往linux核心裡新增一個驅動模組,根據《linux裝置驅動》第三版,修改Makefile如下: obj-m := GobiNet.o GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o 但是出現瞭如下錯誤:

嵌入式linux簡單webserver

現在智慧家居越來越多了,好多裝置都可以用手機控制,而手機通常又通過wifi網路與裝置互動! 特點是實時性要求不高,而且都是隨時進行的,所以很想訪問web頁面,所以http方式很適合 以下是linux簡單web原始碼,可以放入到嵌入式裝置,通過web或者app可以控制和查詢硬

Linux簡單的檔案系統aufs剖析詳解

對於一個普通的程式設計小白來說,檔案系統無非就是幾個功能,建立檔案,建立目錄,開啟檔案和檔案讀寫。對於通常的硬碟檔案系統來說,這要涉及硬碟的讀寫和硬碟空間管理,而讀寫從檔案系統一直到通用塊裝置再到硬碟驅動。我們這些就剖析最簡單的檔案系統,深入核心。 aufs檔

初學者編譯Linux核心,簡單ko模組

#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> MODULE_LICENSE("GPL"); static int __init helloko_init() {/* K

linux驅動模組編譯步驟

現在我來說明一下這個Makefile。請記住是大寫的Makefile而不是小寫的makefile; obj-m :這個變數是指定你要聲稱哪些模組模組的格式為 obj-m := <模組名>.omodules-objs :這個變數是說明聲稱模組modules需要的目標檔案 格式要求   <模組

linux驅動模組編譯(初學者)

現在我來說明一下這個Makefile。請記住是大寫的Makefile而不是小寫的makefile;obj-m :這個變數是指定你要聲稱哪些模組模組的格式為 obj-m := <模組名>.omodules-objs :這個變數是說明聲稱模組modules需要的目標檔案 格式要求   <模組名&

Linux核心驅動模組編譯

核心模組的構建有兩種主要方式:放在核心原始碼樹中或者放在核心程式碼外。 一、放在核心原始碼樹中 在核心的drivers/資料夾下建立好驅動模組資料夾,並完成驅動檔案之後,需要編輯和修改相應的Kconfig和Makefile檔案,使得該模組可以配置到核心中並進行編譯。 1.

linux開發の如何靜態的將驅動模組編譯進核心

在解決這個問題之前,我們先搞明白linux究竟是怎樣管理原始碼中上萬個檔案的。我們看Linux原始碼的目錄,十分科學,基本上看到目錄就可以猜到裡面放的什麼,那怎麼把檔案連線起來,靠的就是Kconfig,它可以告知Makefile那些編譯那些不編譯。第一步:在driver目錄下

嵌入式Linux截圖工具gsnap移植分析【轉】

ram creat 嵌入式linux mbed 生活 rip 改變 因此 sig 轉自:http://blog.csdn.net/lu_embedded/article/details/53934184 版權聲明:開心源自分享,快樂源於生活 —&mdash

[Linux] 簡單的方式安裝mysql

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum update yum install mys

Android AIDL簡單易懂的使用解析(2)

在上篇文章 Android AIDL最簡單易懂的使用與解析(1)中,我們學會了如何編寫一個簡單的 AIDL 來進行跨程序通訊,本著知其然更要知其所以然的道理,在這一篇中我們就來具體看看 AIDL幫我們生成了一套基於 Binder 的怎樣的介面吧~ 我們先來看看testAID

#嵌入式Linux小系統移植# yaffs2根檔案系統移植出錯記錄

busybox官網地址: 本次移植採用的busybox版本: busybox-1.26.0.tar.bz2 交叉編譯工具鏈版本: $ arm-linux-gcc -v gcc version 4.4.3 (ctng-1.6.1) 1

嵌入式Linux——塊裝置驅動

        宣告:本文章是看韋東山老師的教學視訊後並閱讀了一些部落格後所寫的塊裝置的驅動程式,其中包括一些對程式的分析,如果文中的分析與您的文章相同敬請提出,我會做相應的修改或刪除。同時如果我的文章對你有所幫助那是我的幸運。        說起塊裝置驅動,我們就會想我們

linux簡單搭建郵件伺服器

一、概述:   在配置郵件伺服器之前,先解釋幾個概念。   通常使用Email都很容易,但是Internet的郵件系統是通過幾個複雜的部分連線而成的,對於終端使用者而言,我們熟悉的Outlook,Foxmail等都是用來收信和發信的,稱之為MUA:Mail User

linux 下靜態庫的編譯使用

前言 最近在學習《linux/Unix系統程式設計手冊》,對下載原始碼後將原始碼編譯成庫並使用的過程進行記錄。 靜態庫的字尾是.a,它的產生分兩步 : 1、由原始檔編譯生成一堆.o,每個.o裡都包

嵌入式Linux截圖工具gsnap移植分析

  由於 Linux 系統的 FrameBuffer 機制,把螢幕上的每個點對映成一段線性記憶體空間,這樣,程式就可以通過改變這段記憶體的值來改變螢幕上某一點的顏色。如果我們想把當前的顯示內容儲存起來,可能會想到如下命令: # cat /dev/fb0 &

嵌入式Linux——IIC匯流排驅動(3):IIC驅動OLED外設

簡介:         本文主要介紹在jz2440開發板上驅動OLED外設,使其顯示我們在應用層輸入的語句。而同時我將該文分成了兩部分,第一部分講解i2c匯流排的實現,而第二部分講解在i2c匯流排實現後,我們使用字元裝置驅動來實現對OLED的控制。     Linux

史上簡單Android原始碼編譯環境搭建方法(基於Docker)

利用Docker映象確實可以簡化編譯環境的配置,現在Docker的用處還是挺多的,例如TensorFlow也可以在Docker上玩。有史以來,Android原始碼編譯環境的搭建始終是一件麻煩事兒。網上有數不清的文章介紹如何編譯Android原始碼,但是他們要麼方法複雜、步驟太

#嵌入式Linux小系統移植# 對uboot移植和裁剪的一點點個人思考和總結

思路: 1.分析啟動流程 2.移植config檔案(smdk440_config) 3.移植包含控制條件編譯巨集的.h檔案(configs/s3c2440.h) 4.移植板級初始化.c檔案(s3c2440.c) 5.移植RAM初始化?DDR? 6.移植NorF