資料下載
代碼語言:JavaScript代碼運行次數:0運行復制
視頻觀看
百問網驅動大全
Uinput分析_用戶態創建input_dev
參考資料:
1. 概念
uinput是一個內核模塊(驅動),它允許應用程序模擬輸入設備(input_dev)。 應用程序通過訪問/dev/uinput或/dev/input/uinput:
創建一個虛擬的輸入設備設置它的屬性APP發送數據給它,讓它產生輸入事件uinput就會把這些輸入事件分發給其他使用者(APP或內核里其他模塊)
框圖如下:

2. 編寫應用程序3. 上機實驗3.1 設置工具鏈
在ubuntu中執行:
代碼語言:javascript代碼運行次數:0運行復制
export ARCH=armexport CROSS_COMPILE=arm-linux-gnueabihf-export PATH=$PATH:/home/book/100ask_imx6ull-qemu/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
3.2 配置內核
配置內核:執行make menuconfig
代碼語言:javascript代碼運行次數:0運行復制
-> Device Drivers -> Input device support -> Generic input layer -> Miscellaneous devices <M> User level driver support
3.3 編譯驅動代碼語言:javascript代碼運行次數:0運行復制
book@100ask:~/100ask_imx6ull-qemu$ cd linux-4.9.88book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make modules
成功的話,可以得到:
代碼語言:javascript代碼運行次數:0運行復制
drivers/input/misc/uinput.ko
復制到如下目錄:
代碼語言:javascript代碼運行次數:0運行復制
$ cp drivers/input/misc/uinput.ko ~/nfs_rootfs/
3.4 編譯測試程序
把代碼04_uinput上傳到Ubuntu,設置好交叉編譯工具鏈后,在04_uinput目錄下執行make命令即可。
代碼語言:javascript代碼運行次數:0運行復制
$ make$ cp uinput_test ~/nfs_rootfs/
3.5 啟動QEMU
在Ubuntu中執行:
代碼語言:javascript代碼運行次數:0運行復制
$ cd ubuntu-18.04_imx6ul_qemu_system$ ./qemu-imx6ull-gui.sh
3.6 掛載NFS、實驗
在QEMU中執行:
代碼語言:javascript代碼運行次數:0運行復制
$ mount -t nfs -o nolock,vers=3 10.0.2.2:/home/book/nfs_rootfs /mnt$ insmod /mnt/uinput.ko$ ls -l /dev/uinput // 確認設備節點// 后臺運行uinput_test/mnt/uinput_test &// 看到提示這個提示時: Will sleep 60s, in this time you should run ts_calibreate// 運行校準程序// 注意:如果有真實的觸摸屏驅動,需要指定使用虛擬的設備節點// 方法示例: export TSLIB_TSDEVICE=/dev/input/event3ts_calibrate// 看到提示這個提示時: Will sleep 60s, in this time you should run ts_test// 運行測試程序ts_test
4. 結合應用程序分析uinput
ibrate
// 看到提示這個提示時: Will sleep 60s, in this time you should run ts_test // 運行測試程序 ts_test
代碼語言:javascript代碼運行次數:0運行復制
### 4. 結合應用程序分析uinput