目前分類:driver 教學 (17)

瀏覽方式: 標題列表 簡短摘要

4.1 核心模組程式結構

  • 載入:insmodmodprobe(同時載入模組的依賴模組)
  • 卸載:rmmod
  • 查看已載入的模組及模組間的依賴關係:lsmod,實際上是分析/proc/modules
  • 已載入的模組資訊放在/sys/module目錄下,沒載入一個模組就會在該目錄下生成一個以模組名命名的目錄,“tree -a”可獲取目錄樹
  • 模組許可聲明:申明許可許可權,否則將收到核心被污染警告,一般申明為MODULE_LICENSE(“GPL v2”)語句申明採用GPL v2.
  • 模組參數(可選):模組被載入的時候可以傳遞給它的值,它本身對對應模組的內部的全域變數
  • 模組匯出符(可選):其他模組可以使用模組匯出的函數和變數
  • 模組作者等資訊聲明

4.2 模組載入函數

  • Linux核心模組載入函數一般以__init標識申明,如

static int __init initialization_function(void)

文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣()

Linux Device Driver 授權

MODULE_LICENSE("許可證") 會在產生 .ko 檔裡面的 .modinfo section 放 "lincense=許可證" 的資訊,可用 objdump 去看。

其中,只有許可證是 "GPL", "GPL v2", "GPL and additional rights", "Dual BSD/GPL", "Dual MIT/GPL", "Dual MPL/GPL" 之一,才認為是 GPL 相容。
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣()

對於如何向模組傳遞參數,Linux kernel 提供了一個簡單的框架。其允許驅動程式聲明參數,並且使用者在系統啟動或模組裝載時為參數指定相應值,在驅動程式裡,參數的用法如同全域變數。

立你斯 發表在 痞客邦 留言(0) 人氣()



#define SUPPORT_AUDIO 1

立你斯 發表在 痞客邦 留言(0) 人氣()

為什麼需要內核鎖?

多核處理器下,會存在多個行程處於內核態的情況,而在內核態下,行程是可以訪問所有內核資料的,因此要對共用資料進行保護,即互斥處理

 

立你斯 發表在 痞客邦 留言(0) 人氣()

本文轉自如何使用queue_delayed_work函數

1. delayed_workqueue主要用在需要延遲處理任務的驅動中,這些驅動的特性主要是不能使用中斷。

delayed_workqueue的使用步驟如下:

立你斯 發表在 痞客邦 留言(0) 人氣()

__devexit_p的功能

看驅動的時候,時常會有如下代碼:
.remove = __devexit_p(XX_exit),

立你斯 發表在 痞客邦 留言(0) 人氣()

一個簡單的 Linux Kernel Module

Nov 13th, 2012 | Comments

以下會建立一個非常簡單的 linuxk kernel,只會包含兩個 funciton — 即 init 與 exit 分別在 module 載入及退出的時候會呼叫到

建立 hello.c

這邊不免俗的使用 hello module,先建立 hello_init 與 hello_exit,並且印出訊息

立你斯 發表在 痞客邦 留言(0) 人氣()

 

kernel 中使用 interrupt 並與 userspace process 之溝通

在 kernel 中接受到 button trigger 的 interrupt 後,透過 signal 與 userspace 的 process 溝通



kernel ————————–userspace

立你斯 發表在 痞客邦 留言(0) 人氣()

今天在寫觸控式螢幕驅動時在中斷處理函數中使用disable_irq關中斷發現在進入中斷處理後內核就掛掉了,於是研究了一下才發現disable_irq關閉中斷並等待中斷處理完後返回, disable_irq_nosync立即返回. 在中斷處理常式中應該使用disable_irq_nosync來關閉中斷

 

先看一下disable_irq_nosync,內核代碼中是這樣解釋的:

立你斯 發表在 痞客邦 留言(0) 人氣()

在讀 Linux Permier 中文版的時候. Page 2-41 有一段

使用 likely() 與 unlikely() 巨集透過編譯器告知 CPU 有哪些程式區段不需要預測(likely)或有哪些程式區段需要預測(unlikely).

 

立你斯 發表在 痞客邦 留言(0) 人氣()

kernel 2.6.35 及之前的版本中struct file_operations 一共有3ioctl


ioctl,unlocked_ioctlcompat_ioctl

立你斯 發表在 痞客邦 留言(0) 人氣()

什麼是 workqueue ?
Linux 中的 Workqueue 機制就是為了簡化核心執行緒的建立。 通過呼叫 workqueue 的介面就能建立核心執行緒。 並且可以根據當前系統 CPU 的個數建立執行緒的數量,使得執行緒處理的事務能夠並行化。


立你斯 發表在 痞客邦 留言(0) 人氣()

內核API,第3 部分: 2.6 內核中的計時器和列表


http://www.ibm.com/developerworks/cn/linux/l-timers-list/index.html

立你斯 發表在 痞客邦 留言(0) 人氣()

LINUX 驅動程式 LDD3


立你斯 發表在 痞客邦 留言(0) 人氣()

LINUX-Writing the kernel console driver




立你斯 發表在 痞客邦 留言(0) 人氣()

LINUX-The Serial Driver Layer



The Serial Driver Layer

立你斯 發表在 痞客邦 留言(0) 人氣()