imx 6 ul-正点原子-imx 6 ul学習ノート(6)-コマンド
4576 ワード
5:コマンドセットのテスト
1、先に取り付けた駆動をクリアする
2、lsmodロードに成功したドライバを表示します.
3、
3、設備番号の表示
4、設備名200主設備番号0次設備番号.
5、正常に作成されたデバイスノードを表示します.
6、
7、
8、モジュールのアンインストール
6:デバイスツリーコマンドセット:
1、作成したデバイスノードを表示する
2、ls
7:文字駆動フレーム部分コード
1:、
2、
led_Init:初期化(入口)
/*1、デバイス番号の作成*/
/*2、初期化cdev*/
/*3、cdevを追加*/
/*4、クラスの作成*/
/*5、デバイスの作成*/
led_exit:出口
1、デバイス番号関数の作成
1、 MKDEV();
2、 register_chrdev_region();
3、alloc_chrdev_region();
4、 MAJOR();
5、 MINOR();
2、cdevの初期化
1、
2、 cdev_init();
3、cdevの追加
1、 cdev_add();
2、 unregister_chrdev_region();//ログアウト
4、クラスの作成
1、class_create();
2、class_destroy(keydev.class);
5、設備の作成
1、 device_create();
2、 cdev_del(&keydev.cdev);
8:デバイスツリーコマンドセット
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