字符设备3 —— 代码目录
本目录包含了《RK3588系列内核开发——I/O模型、定时器、IOCTL与中断》博客中所有示例代码。
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| 字符设备3_code/ ├── 01_block_io/ │ ├── Makefile │ ├── block_io.c │ └── block_io_app.c │ ├── 02_fasync/ │ ├── Makefile │ ├── fasync_dev.c │ └── fasync_app.c │ ├── 03_poll/ │ ├── Makefile │ ├── poll_dev.c │ └── poll_app.c │ ├── 04_timer_led/ │ ├── Makefile │ └── timer_led.c │ ├── 05_hrtimer/ │ ├── Makefile │ └── hrtimer_dev.c │ ├── 06_ioctl/ │ ├── Makefile │ ├── ioctl_cmd.h │ ├── ioctl_dev.c │ └── ioctl_app.c │ ├── 07_key_irq/ │ ├── Makefile │ ├── key_irq.c │ └── key_test.c │ ├── 08_key_threaded_irq/ │ ├── Makefile │ └── key_irq_threaded.c │ ├── assert/ │ └── (请将截图放在此目录) │ ├── Makefile └── README.md
|
编译说明
每个子目录下的 Makefile 需要修改 KERNEL_DIR 和 CROSS_COMPILE 为你的实际路径:
1 2 3
| ARCH := arm64 CROSS_COMPILE := /你的交叉编译链路径/aarch64-none-linux-gnu- KERNEL_DIR := /你的RK3588内核源码路径
|
然后在该目录下执行:
1
| make clean && make -j$(nproc)
|
生成的 .ko 文件拷贝到 RK3588 开发板上:
1
| scp *.ko topeet@板子IP:~/ker_test/
|
用户态程序编译
用户态程序(*_app.c、key_test.c)在 RK3588 开发板上直接编译:
1
| gcc xxx_app.c -o xxx_app
|
测试命令速查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| sudo insmod block_io.ko sudo cat /dev/block_io sudo echo "test" > /dev/block_io sudo rmmod block_io
sudo insmod fasync_dev.ko sudo ./fasync_app sudo echo "data" > /dev/fasync_dev sudo rmmod fasync_dev
sudo insmod poll_dev.ko sudo ./poll_app sudo echo "hello" > /dev/poll_dev sudo rmmod poll_dev
sudo insmod timer_led.ko sudo echo "500" > /dev/timer_led sudo echo "0" > /dev/timer_led sudo rmmod timer_led
sudo insmod hrtimer_dev.ko sudo echo "100000" > /dev/hrtimer_dev sudo echo "0" > /dev/hrtimer_dev sudo rmmod hrtimer_dev
sudo insmod ioctl_dev.ko sudo ./ioctl_app sudo rmmod ioctl_dev
sudo insmod key_irq.ko cat /proc/interrupts | grep rk3588 sudo ./key_test sudo rmmod key_irq
sudo insmod key_irq_threaded.ko cat /proc/interrupts | grep threaded sudo ./key_test sudo rmmod key_irq_threaded
|