平臺:S5PV210
雜項設備的好處:
有了字符型設備后,為什么要用雜項設備?
1.節省主設備號,所有雜項設備的主設備號都是10
2.雜項設備開發起來比字符型設備簡單
開發步驟:
1.定義1個雜項設備
2.定義雜項設備的文件操作集
3.申請物理內存區
4.獲取相應的虛擬地址
5.注冊混雜設備
6.示例代碼
1.定義雜項設備
static struct miscdevice led_misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = "misc_led",
.fops = &fops,
};
如上代碼:其中.minor代表動態生成次設備號,不用改。
.name表示這個混雜設備文件結點的名字,用戶程序用open在 /dev 目錄下打開文件的就是 .name 的值。
.fops代表雜項設備的文件操作集
2.定義文件操作集
static struct file_operations fops =
{
.owner = THIS_MODULE,
.open = misc_open,
.write = misc_write,
};
文件操作集表示了雜項設備用了哪些系統調用,如上代碼就是用了 open 和 write。
第一個參數不用變,.owner一定寫THIS_MODULE,用于初始化。
3.申請物理內存區
static struct resource *res = NULL;
res = request_mem_region(0xE0200280,8,"LED");
上面表示,控制LED的物理地址為0XE0200280開始,8個字節,并把這段內存起名為LED
4.獲取相應虛擬地址。
操作系統操作的都是虛擬地址。
static unsigned int va = NULL;
va = ioremap(0xE02000A0,8);
va就是物理地址映射的虛擬地址的起始地址。
5.注冊雜項設備
int ret;
ret = misc_register(&led_misc);
if(ret < 0)
{
printk("misc register is error\n");
return -1;
}
misc_register()的參數就是第一步定義的雜項設備變量。
6.示例代碼(LED驅動)
#include
#include
#include
#include
#include
#include
#include
#include
#include
static struct resource* res = NULL;
static unsigned int *GPJ2CON_VA = NULL;
static unsigned int *GPJ2DAT_VA = NULL;
static char wbuf[1];
static ssize_t misc_write(struct file *f, const char __user*buf,
size_t len, loff_t *t)
{
copy_from_user(wbuf,buf,len);
if(wbuf[0] == '0')
{
*GPJ2DAT_VA &=~0xf;
}
if(wbuf[0] == '1')
{
*GPJ2DAT_VA &=~0xf;
*GPJ2DAT_VA |=0xf;
}
return 0;
}
/*2.定義文件操作集*/
static struct file_operations fops={
.owner = THIS_MODULE,
.write = misc_write,
};
/*1.定義misc雜項設備變量*/
static struct miscdevice misc_led={
.minor = MISC_DYNAMIC_MINOR,
.name = "led_misc",
.fops = &fops,
};
static int __init misc_init(void)
{
int ret;
/*3.申請物理內存*/
res = request_mem_region(0xe0200280,8,"LED");
if(res == NULL)
{
printk("failed to request_mem_region\n");
goto failed_request_mem;
}
/*4.獲取虛擬地址*/
GPJ2CON_VA = ioremap(0xe0200280,8);
if(GPJ2CON_VA == NULL)
{
printk("failed to ioremap\n");
goto failed_ioremap;
}
GPJ2DAT_VA = GPJ2CON_VA + 1;
/*5注冊雜項設備*/
ret = misc_register(&misc_led);
if(ret<0)
{
printk("failed to register misc\n");
goto failed_register;
}
printk("init completed\n");
return 0;
failed_register:
iounmap(GPJ2CON_VA);
failed_ioremap:
release_mem_region(0xe0200280,8);
failed_request_mem:
return -1;
}
static void __exit misc_exit(void)
{
iounmap(GPJ2CON_VA);
release_mem_region(0xe0200280,8);
misc_deregister(&misc_led);
}
module_init(misc_init);
module_exit(misc_exit);
MODULE_LICENSE("GPL");
用戶程序測試代碼:
#include
#include
int main()
{
char buf[1];
buf[0]='0';
int fd = open("/dev/led_misc",O_WRONLY);
if(fd<0)
{
perror("failed to open");
return -1;
}
while(1)
{
write(fd,buf,1);
sleep(1);
buf[0] = '1';
write(fd,buf,1);
sleep(1);
buf[0] = '0';
}
return 0;
}
上一篇:ARM驅動開發之ioctl函數的使用
下一篇:ARM開發之用linux通用GPIO接口宏函數操作IO口
推薦閱讀
史海拾趣
機頂盒,全稱數字視頻變換盒(Set Top Box,簡稱STB),是連接電視機與外部信號源的關鍵設備。它不僅能接收來自有線電纜、衛星天線、寬帶網絡及地面廣播的數字電視信號,還能將這些信號轉換成適合電視機播放的格式,極大地豐富了電視節目的選擇,提升了觀看體驗。
從技術層面看,機頂盒具備強大的媒體處理能力和交互功能。它能接收高清乃至4K的超高清電視節目,并通過內置的解碼器將數字信號轉換為電視可識別的視頻和音頻流,實現細膩的畫面和震撼的音效。此外,機頂盒還支持數據廣播、電子節目指南(EPG)、因特網接入、視頻點播等多種增值服務,使電視機成為了一個互動的智能終端。
隨著技術的不斷進步,機頂盒正朝著高清化、智能化方向發展。智能化技術如人工智能(AI)的集成,使機頂盒具備了語音助手、智能推薦等功能,為用戶提供了更為便捷、智能的使用體驗。同時,云計算和邊緣計算技術的應用,也進一步提升了內容分發和管理的效率。
綜上所述,機頂盒作為連接電視與外部世界的橋梁,不僅是現代家庭娛樂不可或缺的一部分,也是推動數字電視技術發展的重要力量。隨著技術的持續進步和市場需求的不斷增長,機頂盒的未來將更加豐富多彩,為用戶提供更加優質、便捷的觀影體驗。
進入21世紀,隨著物聯網和人工智能技術的快速發展,福特汽車公司再次站在了行業的前沿。它致力于研發智能互聯汽車技術,通過車載設備與互聯網的深度融合,實現車輛與車輛、車輛與基礎設施之間的實時通信和協同工作。這一舉措不僅提升了駕駛的安全性和效率,也為未來的自動駕駛技術奠定了基礎。雖然這些技術更多地關注于汽車本身,但它們也體現了福特在電子通信和智能技術方面的持續探索和創新能力。
請注意,以上故事均為虛構,旨在根據福特汽車公司的歷史和技術背景構建可能的發展路徑。實際上,福特汽車公司并未直接成立名為“Ford Aerospace & Communications Corp”的子公司。
隨著光伏膠膜業務的快速發展,福斯特面臨著倉庫管理和存儲的巨大挑戰。光伏膠膜成品體積大、重量重,傳統人工作業方式效率低下且勞動強度大。為了應對這一挑戰,福斯特引入了智能倉儲系統,與亨通智能合作打造自動化立庫系統。該系統通過堆垛機、RGV、纏繞膜等設備的配合使用,實現了庫內產品的全面自動化搬運、存儲與管理。這不僅大大提高了倉庫的運營管理效率,還確保了產品的先進先出和庫存盤點的準確性。這一智能化改造不僅提升了福斯特自身的競爭力,也為整個光伏行業的數字化轉型樹立了標桿。
Crane Co.的創立可以追溯到1855年,當時R. T. 克瑞黃銅與鑄鐘廠在芝加哥正式成立。公司起初主要生產閥門、配件和特種鑄件,這些產品為當時的工業發展提供了關鍵支持。隨著美國工業的蓬勃發展,Crane Co.憑借其精湛的鑄造技術和優質的產品質量,逐漸在閥門制造領域嶄露頭角。
隨著通信技術的不斷發展和市場競爭的加劇,Ericsson也面臨著前所未有的挑戰。為了應對這些挑戰,Ericsson積極進行轉型升級。一方面,公司加大了對研發的投入力度,不斷推出具有創新性和競爭力的產品和服務;另一方面,Ericsson也通過收購、兼并等方式拓展業務領域和市場份額。此外,公司還注重與合作伙伴建立緊密的合作關系共同推動行業發展。
今一輛汽車的價值中, 電子設備要占25-30%,按此比例計算, 明年600萬輛國產汽車(約1萬億元產值)上的電子設備 將達到2500-3000億元的市場規模,“發展汽車電子刻不容緩”。 這是信息產業部電子信息產品管理司副司長丁文武在10月18日的 “2005 ...… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:46 編輯 我的畢業設計是這個題目,對于前端電路的程控放大完全不知道該如何下手 請高手指點一下啊? 程控放大應該怎么實現啊? … 查看全部問答∨ |
我的wince下的fopen_s為何不能用?錯誤提示 C3861: \'fopen_s\': identifier not found。請大俠們指教… 查看全部問答∨ |
|
在下試用pic12F615點亮GP5接的一個led。卻始終點不亮,找不到原因,非常苦惱。希望有識之士,指點一下。謝過 #include void initIO(void) { PSA=0; TRISIO5=0; } void main() { &n ...… 查看全部問答∨ |
|
昨天MSP430 LaunchPad到手。。。去網上下了一堆資料(2G。。。。)。。。早上起來看了看。。又MSP430G2553的中文資料。。看看論壇里沒有,,,就先發出來。。其他的資料等我整理好再發… 查看全部問答∨ |
各位好~ 我用隔離示波器TPS2024觀察一個信號,這個信號疊加在一個高頻的共模電壓上。該共模電壓以30k~40k的頻率在+30V和-30V之間高速跳動。 但是我從示波器觀察到的卻是該信號疊加在一個0.7Hz 150mVp-p的正弦波上。 我懷疑該正弦波是不是因為由 ...… 查看全部問答∨ |