imx 6 ul-正点原子-imx 6 ul学習ノート(6)-コマンド

4576 ワード

5:コマンドセットのテスト
1、先に取り付けた駆動をクリアする
depmod            

2、lsmodロードに成功したドライバを表示します.
modprobe  .ko   .ko    。

3、
ls /dev

3、設備番号の表示
cat /proc/devices 

4、設備名200主設備番号0次設備番号.
mknod /dev/newchrled C 200 0      /dev/newchrled  

5、正常に作成されたデバイスノードを表示します.
ls /dev/newchrled -l     

6、
./ledAPP  /dev/newchrled  1 

7、
./ledAPP  /dev/newchrled  0 

8、モジュールのアンインストール
rmmod .ko 

6:デバイスツリーコマンドセット:
1、作成したデバイスノードを表示する
			cd /proc/device-tree/

2、ls
7:文字駆動フレーム部分コード
1:、
/* newchrled      */
struct newchrled_dev{
	dev_t devid;			/*     	 */
	struct cdev cdev;		/* cdev 	*/
	struct class *class;		/*   		*/
	struct device *device;	/*    	 */
	int major;				/*     	  */
	int minor;				/*        */
};

2、
	/*        */
	static struct file_operations newchrled_fops = {
	.owner = THIS_MODULE,
	.open = led_open,
	.read = led_read,
	.write = led_write,
	.release = 	led_release,
	};	

led_Init:初期化(入口)
/*1、デバイス番号の作成*/
if (newchrled.major) {		/*         */
	newchrled.devid = MKDEV(newchrled.major, 0);
	register_chrdev_region(newchrled.devid, NEWCHRLED_CNT, NEWCHRLED_NAME);
} else {						/*         */
	alloc_chrdev_region(&newchrled.devid, 0, NEWCHRLED_CNT, NEWCHRLED_NAME);	/*       */
	newchrled.major = MAJOR(newchrled.devid);	/*            */
	newchrled.minor = MINOR(newchrled.devid);	/*            */
}

/*2、初期化cdev*/
newchrled.cdev.owner = THIS_MODULE;
cdev_init(&newchrled.cdev, &newchrled_fops);

/*3、cdevを追加*/
cdev_add(&newchrled.cdev, newchrled.devid, NEWCHRLED_CNT);

/*4、クラスの作成*/
newchrled.class = class_create(THIS_MODULE, NEWCHRLED_NAME);
if (IS_ERR(newchrled.class)) {
	return PTR_ERR(newchrled.class);
}

/*5、デバイスの作成*/
newchrled.device = device_create(newchrled.class, NULL, newchrled.devid, NULL, NEWCHRLED_NAME);
if (IS_ERR(newchrled.device)) {
	return PTR_ERR(newchrled.device);
}

led_exit:出口
	/*          */
cdev_del(&newchrled.cdev);/*    cdev */
unregister_chrdev_region(newchrled.devid, NEWCHRLED_CNT); /*       */

device_destroy(newchrled.class, newchrled.devid);
class_destroy(newchrled.class);

1、デバイス番号関数の作成
1、 MKDEV();
#define MKDEV(ma,mi)	(((ma) << MINORBITS) | (mi))
MKDEV(keydev.major,0);

2、 register_chrdev_region();
extern int register_chrdev_region(dev_t, unsigned, const char *);
ret = register_chrdev_region(keydev.devid,KEY_CNT,KEY_NAME);

3、alloc_chrdev_region();
extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
ret = alloc_chrdev_region(&keydev.devid,0,KEY_CNT,KEY_NAME);

4、 MAJOR();
#define MAJOR(dev)	((unsigned int) ((dev) >> MINORBITS))
keydev.major = MAJOR(keydev.devid);

5、 MINOR();
#define MINOR(dev)	((unsigned int) ((dev) & MINORMASK))
keydev.minor = MINOR(keydev.devid);

2、cdevの初期化
1、
keydev.cdev.owner = THIS_MODULE;

2、 cdev_init();
void cdev_init(struct cdev *, const struct file_operations *);
cdev_init(&keydev.cdev,&keydev.fops);

3、cdevの追加
1、 cdev_add();
int cdev_add(struct cdev *, dev_t, unsigned);
ret = cdev_add(&keydev.cdev,keydev.devid,KEY_CNT);

2、 unregister_chrdev_region();//ログアウト
extern void unregister_chrdev_region(dev_t, unsigned);
unregister_chrdev_region(key.devid, KEY_CNT);

4、クラスの作成
1、class_create();
	#define class_create(owner, name)
	keydev.class = class_create(THIS_MODULE,KEY_NAME);

2、class_destroy(keydev.class);
5、設備の作成
1、 device_create();
struct device *device_create(struct class *cls, struct device *parent,
	     dev_t devt, void *drvdata,
	     const char *fmt, ...);
keydev.device = device_create(keydev.class,NULL,keydev.devid,NULL,KEY_NAME);

2、 cdev_del(&keydev.cdev);
8:デバイスツリーコマンドセット
sudo cp arch/arm/boot/dts/imx6ull-alientek-emmc.dtb /home/jk9/linux/tftpboot/ -f

reboot