led驅動實驗步驟:
準備工作(led驅動):
1 準備測試的工具
2 準備相關字元裝置驅動的知識
3 準備相關驅動(led)檔案
4 準備相關的硬體知識,獲取硬體開發人員提供的led介面。
driver/char
psled_player 701
kill 701
./ledtest 0 0
./ledtest 0 1
./ledtest 0 2
./ledtest 0 3
./ledtest 1 0
./ledtest 1 1
./ledtest 1 2
./ledtest 1 3
./dxctest 0 0
./dxctest 0 1
led0~led3, gpb5~gpb8
(12 make menuconfig,把m改為*,make zimage)
寫**:
1 核心模組的要素完成
2 初始化函式,確認主裝置號,次裝置號。
3 初始化函式,分配記憶體
4 初始化函式,安裝cdev
5 實現file操作函式
obj-$(config_myled_mini2440) += myled.o
int main()
fp = open("/dev/dfsgdsg", 0)
ioctl(fp, atoi(argv[1]), atoi(argv[2]));
return;
arm-linux-gcc 54te.c -o dxctest
具體操作:
led驅動**:(myled_driver.c)
#include
#include
#include
#include /* printk() */
#include /* kmalloc() */
#include /* everything... */
#include /* error codes */
#include /* size_t */
#include /* o_accmode */
#include /* cdev...*/
#include /* writel(),readl()... */
#include /* cli(), *_flags */
#include /* copy_*_user */
#include /* wake_up_interruptible()... */
#include /* udelay() */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define device_name "myled" //巨集定義裝置名稱
static int led_major = 0; //初始化主裝置號
static int led_minor = 0; //初始化次裝置號
struct cdev *led_device; //定義cdev結構體指標
//下面的兩個陣列是處理器相關的資訊
static unsigned long led_table = ;
static unsigned int led_cfg_table = ;
//裝置開啟函式
static int myled_open(struct inode *inode, struct file *filp)
return 0;
}//裝置關閉函式
static int myled_release(struct inode *inode, struct file *filp)
//裝置操作函式
static int myled_ioctl (struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg)
s3c2410_gpio_setpin(led_table[arg], !cmd);
return 0;
default:
return -einval;}}
struct file_operations led_fops = //字元驅動和核心的介面:file_operations結構體
;static void __exit my_led_exit(void) //模組結束函式
/* cleanup_module is never called if registering failed */
unregister_chrdev_region(devno, 1); //取消註冊裝置號
return;
}static int __init my_led_init(void) //模組入口函式
led_device = kmalloc(sizeof(struct cdev), gfp_kernel); //為裝置分配記憶體
if (!led_device)
memset(led_device, 0, sizeof(struct cdev)); //清空記憶體
cdev_init(led_device, &led_fops); //字元裝置初始化函式:把為裝置分配的記憶體與操作裝置的結構相關聯
led_device->owner = this_module;
result = cdev_add (led_device, dev, 1); //裝置增加
if (result)
return 0;
}module_init(my_led_init); //模組入口函式
module_exit(my_led_exit); //模組出口函式
module_license("gpl");
測試的應用程式(testled.c):
#include
int main(int argc,char *argv)
fp=open("/dev/myled",0);
if(fp<0)
printf("test:%d\n",atoi(argv[1]));
if(atoi(argv[1])<8)
if(atoi(argv[1])==8)
if(atoi(argv[1])==9)
if(atoi(argv[1])==10)
if(atoi(argv[1])==11)
if(atoi(argv[1])==12)
if(atoi(argv[1])==13)
}
LED燈驅動的編寫
led燈驅動的編寫 一 原理圖 led2 gpx2 7 led3 gpx1 0 led4 gpf3 4 led5 gpf3 5 輸出 0滅 1亮 二 晶元手冊 gpx2con 0x11000c40 31 28 0x1 gpx2dat 0x11000c44 7 0 1 gpx1con 0x11000c...
鳥瞰linux的檔案讀寫全過程
讀寫檔案,是作為乙個作業系統所提供的最基本介面之一。我們就從寫檔案過程 open,write,close這幾個介面來說起,描述寫檔案的那些事兒。平時,我們做應用程式的時候,常常用到讀寫檔案的函式介面,就拿寫檔案來說,我們用c c 編寫時,用到了以下的函式介面 1 file fopen const c...
VC6編寫ActiveX控制項全過程
by rush date 2011年6月22日 20 07 56 vc編寫activex控制項全過程 1 新建控制項工程 在新建專案時,選擇新建activex控制項,如下圖所示 其他的基本可以選擇預設屬性,然後我們就可以進入自己新建的工程了,如右下圖所示。方框中標出的是新建控制項之後自帶的三個類。我...