1
想一次修改某個目錄下所有文件的權限,包括子目錄中的文件權限也要修改,要使用參數-R表示啟動遞歸處理。
剛開始學字符設備驅動,感覺最難的是驅動和底層硬件的連接。linux上的驅動程序,是基于操作系統之上的,他并不直接和底層的硬件打交道,但是我們寫的驅動必須能使硬件“跑”起來,即與硬件緊密相連。
就拿最簡單的LED驅動來說,我們的驅動程序是在虛擬的內存上面跑的,但是最終,LED的點亮還是必須靠GPIO管腳的高低電平來控制。那么,我們的虛擬的內存怎么才能和實際的硬件上面的寄存器對應起來呢?
這篇要寫的就是ioremap這個映射函數,他可以將我們硬件上面的寄存器,映射為虛擬的內存,從而使驅動程序在我們的虛擬的內存中運行。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
2
#include
#include
#include
//#include
volatile unsigned long virt, phys;//用于存放虛擬地址和物理地址
volatile unsigned long *GPBCON, *GPBDAT, *GPBUP;//用與存放三個寄存器的地址
void led_device_init(void)
{
// 0x56000010 + 0x10 包攬全所有的IO引腳寄存器地址
phys = 0x56000010; // 0x56000010=GPBCON
//在虛擬地址空間中申請一塊長度為0x10的連續空間
//這樣,物理地址phys到phys+0x10對應虛擬地址virt到virt+0x10
virt =(unsigned long)ioremap(phys, 0x10);
GPBCON = (unsigned long *)(virt + 0x00);//指定需要操作的三個寄存器的地址
GPBDAT = (unsigned long *)(virt + 0x04);
GPBUP = (unsigned long *)(virt + 0x08);
}
//led配置函數,配置開發板的GPIO的寄存器
void led_configure(void)
{
*GPBCON &= ~(3 << 10)&~(3<<12)&~(3 << 16)&~(3<<20);//GPB12 defaule 清零
*GPBCON |= (1 << 10)|(1<<12)|(1<<16)|(1<<20); //output 輸出模式
*GPBUP |= (1 << 5)|(1 <<6)|(1 <<8)|(1 <<10); //禁止上拉電阻
}
void led_off(void) //點亮led
{
*GPBDAT &= ~(1 << 5)&~(1 << 6)&~(1 << 8)&~(1 << 7);
}
void led_on(void) //滅掉led
{
*GPBDAT |= (1 << 5)|(1 << 6)|(1 << 8)|(1 << 7);
}
static int __init led_init(void) //模塊初始化函數
{
led_device_init(); //實現IO內存的映射
led_configure(); //配置GPB5 6 8 10為輸出
led_on();
printk("hello ON!\n");
return 0;
}
static void __exit led_exit(void) //模塊卸載函數
{
led_off();
iounmap((void *)virt); //撤銷映射關系
printk("led OFF!\n");
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("litingting<>");
MODULE_VERSION("2015-5-26");
3 makefile
ifneq ($(KERNELRELEASE),)
obj-m :=vir.o
else
KERNELDIR :=/home/litingting/gec2440/linux-2.6.30.4
all:
make -C $(KERNELDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.o *.ko *.mod.o *.mod.c *.symvers modul* *.*~
endif
上一篇:SC2440虛擬地址到物理地址的轉換
下一篇:linux中S3C2440的物理地址映射到虛擬地址詳解
推薦閱讀
史海拾趣
隨著市場需求的不斷變化,FDI不斷投入研發,致力于技術創新。他們不僅優化了現有的GUI產品,還將其應用范圍擴大到了更多領域,如醫療設備、工業自動化、汽車電子等。同時,FDI還拓展了產品線,推出了光電元件、射頻/IF和RFID、編程器、開發系統以及集成電路(IC)等一系列產品。這些創新舉措使得FDI在電子行業中的影響力不斷擴大,市場份額逐步提升。
在伊頓的發展歷程中,合作伙伴起到了至關重要的作用。伊頓一直秉持開放合作的態度,與全球各地的企業和機構建立了廣泛的合作關系。通過與合作伙伴的共同努力,伊頓不僅在技術和產品上取得了突破和創新,還實現了市場份額的快速增長和業務的全球化拓展。例如,伊頓與天合智慧達成的戰略合作伙伴關系,就是雙方共同推動分布式光伏產業發展的有力證明。這一合作不僅為雙方帶來了共贏的機會,也為全球能源結構的轉型和升級做出了積極貢獻。
以上五個故事涵蓋了伊頓公司在電子行業中的發展歷程、在中國市場的拓展、與綠色能源的結合、在商用車領域的發展以及與合作伙伴的共贏等多個方面。這些故事不僅展示了伊頓公司的實力和成就,也體現了其不斷創新和追求卓越的精神。
為了進一步拓展電子市場,DuPont公司積極尋求與全球知名電子企業的合作。通過與國際知名品牌的戰略合作,DuPont成功進入了多個重要的電子市場領域,如智能手機、平板電腦、汽車電子等。這些合作不僅為DuPont公司帶來了廣闊的市場空間,也促進了公司在電子領域的技術創新和產品升級。
浙江東亞電子注重企業文化的建設,致力于為員工提供一個良好的工作環境和發展平臺。公司關注員工的學習和成長,為員工提供持續長效的發展機會和有競爭力的薪酬。同時,公司還積極開展各類文化活動和社會公益活動,增強員工的歸屬感和凝聚力。
這些故事框架展示了浙江東亞電子在電子行業中發展起來的幾個重要方面。通過技術創新、產業布局拓展、國際市場開拓、品質管理提升和企業文化建設等方面的努力,公司不斷壯大自身實力,成為行業內的佼佼者。
隨著全球對環保意識的日益增強,Excelsys公司積極響應綠色環保的號召,將環保理念融入到產品設計和生產過程中。公司采用環保材料、優化生產工藝、提高能源利用效率等措施,減少了對環境的影響。同時,公司還積極參與環保公益活動,為行業的綠色發展貢獻力量。
簡述了液晶觸摸屏控制產品的工作原理以及用于觸摸屏控制的專用芯片ADS7843的工作原理。無線數字擴頻通信平臺是無線擴頻通信的一種開放式平臺,在此基礎上增加液晶觸摸屏控制,可實現文字和圖形的編輯和無線傳送,使該產品用途更加廣泛。… 查看全部問答∨ |
|
這個十分的精典.... 里面詳細介紹了元件模型的建立...以及各電源模型的超詳細介紹...最基礎的東西... 是國內的ORCAD書中沒有介紹的....… 查看全部問答∨ |
|
小弟,最近戀上了單片機,后悔當初大學沒有好好學,其實真正的學習還在于實踐加自學, 各位過來人,能否將你們的學習經驗分享分享?目前我只會一下51單片機,輸入輸出基本控制, 中斷,定時器的應用。通信方面還欠缺,系統面就更不會了。還有單片 ...… 查看全部問答∨ |
很快全球的醫院都可能開始采用一種電子*來監測和檢測大小便失禁,并無線發送警報給護理人員。創羿科技訊國外某公司今年年初發布了一款電子*,據稱在全球開創首例,可減少大小便失禁病人的痛苦,同時也提高老年人護理中心員工的效率,減少老年人護理 ...… 查看全部問答∨ |
是2440+wince6.0,目前Driver目錄下面就個Display驅動,從打印出的log看Display驅動已經初始化了,但是LCD是黑屏,就最下面有條白線,不知道是怎么回事,已經把POWER_SET那部分去掉了。 遇到這種情況的朋友請說一下。。。。。。… 查看全部問答∨ |
|
請問各位,我在網上查到DS8963的功能,只要在IE輸入http://bbs.21ic.com/upfiles/img/20074/2007423111710972.jpg就可以看到內部結構圖,但這個IC已停產,連二手也沒得買,哪么我到書店的代用手冊查了用DS8870代換型號NTE2027、SK10277、ECG2027、TC ...… 查看全部問答∨ |