printk的訊息優先權定義在linux/kernel.h
節錄在下面:
1 KERN_EMERG
2 KERN_ALET
3 KERN_CRIT
4 KERN_ERR
5 KERN_WARNIN
6 KERN_NOTICE
7 KERN_INFO
8 KERN_DEBUG
BB 發表在 痞客邦 留言(0) 人氣(11,768)
經常我們在睡眠的代碼中會看到這樣的例子:
if (signal_pending(current)) {
ret = - ERESTARTSYS ;
return ret;
}
關於 - ERESTARTSYS 到底是什麼意思?
-ERESTARTSYS表示信號函數處理完畢後重新執行信號函數前的某個系統調用。
也就是說,如果信號函數前有發生系統調用,在調度用戶信號函數之前,內核會檢查系統調用的返回值,看看是不是因為這個信號而中斷了系統調用。
如果返回值-ERESTARTSYS,並且當前調度的信號具備-ERESTARTSYS屬性,系統就會在用戶信號函數返回之後再執行該系統調用。
這個過程,不必深究,你就知道上層的庫函數,當收到 -ERESTARTSYS 這個返回值後,linux來講,會自動的重新調用這個調用就可以了。
BB 發表在 痞客邦 留言(0) 人氣(2,345)
REF:
http://www.hitripod.com/blog/2012/03/synchronization-mechanism-comparison-spinlock-mutex/
spinlock,mutex,semaphore,critical section的作用和區別
BB 發表在 痞客邦 留言(3) 人氣(67,704)
序言
從這一章開始,我們將詳細的介紹Linux的設備驅動模型。Linux設備驅動模型是一個相當複雜的系統,對於初學者來說真有些無從入手。而且更加困難的是,隨著新的Linux Kernel的release,Linux的設備驅動模型總會有或大或小的變化,我們將盡量展現Linux Kernel 的這種變化。
早期的Linux內核(版本2.4之前)並沒有實現一個統一的設備模型,設備節點的創建一般是mknod命令手動創建或利用devfs文件系統創建。早期的Linux發行版一般會採用手動創建的方式預先把通常用到的節點都創建出來,而嵌入式系統則會採用devfs的方式。起初Linux 2.6內核還支持devfs,但從2.6.18開始,內核完全移除了devfs系統而採用的udev的方式動態的創建設備節點。因此,新的Linux發行版都採用udev的方式管理設備節點文件。(關於udev的詳細信息,請參考: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html )。
Linux2.6設備驅動模型的基本元素是Class、Bus、Device、Driver,下面我們分別介紹各個部分。
Class和Class Device
BB 發表在 痞客邦 留言(0) 人氣(12,567)
驅動註冊platform_driver(一)
從linux-2.6開始引入了一套新的驅動管理和註冊機制:platform_device和platform_driver.
linux中的大部分設備驅動,都可以使用該機制,設備用platform_device表示,驅動用platform_deriver進行註冊。
BB 發表在 痞客邦 留言(0) 人氣(2,138)

//----------------------------------------------------------------
//==//auto create device node//==//
vpu_dev_class = class_create(THIS_MODULE, VPU_DEV_NAME);
if (IS_ERR(vpu_dev_class)){
INFO("can't create class %s\n", VPU_DEV_NAME);
BB 發表在 痞客邦 留言(0) 人氣(2,074)
從Linux 2.6 起引入了一套新的驅動管理和註冊機制:Platform_device 和Platform_driver 。
Linux 中大部分的設備驅動,都可以使用這套機制, 設備用Platform_device 表示,驅動用Platform_driver 進行註冊。
Linux platform driver 機制和傳統的device driver 機制( 通過driver_register 函數進行註冊) 相比,一個十分明顯的優勢在於platform 機制將設備本身的資源註冊進內核,由內核統一管理,在驅動程序中使用這些資源時通過platform device 提供的標準接口進行申請並使用。這樣提高了驅動和資源管理的獨立性,並且擁有較好的可移植性和安全性( 這些標準接口是安全的) 。
BB 發表在 痞客邦 留言(0) 人氣(4,967)
platform_driver_register
platform_driver_register()是來註冊設備的驅動程序
platform_device_register()是來註冊設備硬件,告訴kernel,當前有什麼裝置。
當某個裝置連結後,必須在device和driver的兩端上都有對應的東西才算是匹配上,
並且開始使用driver的probe等函數進行硬件初始化工作。
BB 發表在 痞客邦 留言(0) 人氣(8,702)
//--------------------------------------------------------------------
#include /include/linux/platform_device.h
struct platform_device {
const char *name;
int id;
BB 發表在 痞客邦 留言(0) 人氣(8,967)