当前位置: 首页 > article >正文

003 Linux驱动开发——第一个简单开发实验

01 开发板的第 1 APP 实验


gcc -o hello hello.c
./hello
Hello, world!
./hello weidongshan
Hello, weidongshan!

要想给 ARM 板编译出 hello 程序,需要使用交叉编译工具链
arm-buildroot-linux-gnueabihf-gcc -o hello hello.c
这样编译出来的 hello 程序才可以在 ARM 板子上运行

02 开发板的第 1 个驱动实验

编译内核

cd /home/book/100ask_imx6ull-sdk/Linux-4.9.88
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make mrproper
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make 100ask_imx6ull_defconfig
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make zImage -j4
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make dtbs
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ cp arch/arm/boot/zImage ~/nfs_rootfs
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs

编译内核模块:
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make modules

把模块安装在 nfs 目录“/home/book/nfs_rootfs/”下:
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install

安装内核和模块到开发板上:
[root@imx6ull:~]# cp /mnt/zImage /boot
[root@imx6ull:~]# cp /mnt/100ask_imx6ull-14x14.dtb /boot
[root@imx6ull:~]# cp /mnt/lib/modules /lib -rfd
[root@imx6ull:~]# sync
[root@imx6ull:~]# reboot
[root@imx6ull:~]# uname -a
Linux imx6ull 4.9.88 #1 SMP PREEMPT Sun Jan 19 23:26:58 EST 2025 armv7l GNU/Linux

编译第一个hello驱动程序

对Ubuntu:

book@100ask:~$ cd nfs_rootfs/
book@100ask:~/nfs_rootfs$ ls
01_hello_drv  100ask_imx6ull-14x14.dtb  drivers_projects  lib  zImage
book@100ask:~/nfs_rootfs$ cd  01_hello_drv/
book@100ask:~/nfs_rootfs/01_hello_drv$ cd ~/100ask_imx6ull-sdk/Linux-4.9.88
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ pwd

/home/book/100ask_imx6ull-sdk/Linux-4.9.88

book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ cd -
/home/book/nfs_rootfs/01_hello_drv
book@100ask:~/nfs_rootfs/01_hello_drv$ vi Makefile
book@100ask:~/nfs_rootfs/01_hello_drv$ make all

对开发板:

 

同理驱动led程序:

对Ubuntu:

book@100ask:~/nfs_rootfs/drivers_projects$ ls
01_hello  01_hello_drv  02_led_drv
book@100ask:~/nfs_rootfs/drivers_projects$ cd 02_led_drv/
book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv$ vi Makefile
book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv$ ls
00_led_drv_simple             04_led_drv_template_bus_dev_drv
01_led_drv_template           04_led_drv_template_bus_dev_drv_unfinished
02_led_drv_for_boards         05_led_drv_template_device_tree
03_led_drv_template_seperate

book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv$ ls
00_led_drv_simple             04_led_drv_template_bus_dev_drv
01_led_drv_template           04_led_drv_template_bus_dev_drv_unfinished
02_led_drv_for_boards         05_led_drv_template_device_tree
03_led_drv_template_seperate
book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv$ cd 02_led_drv_for_boards/
book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv/02_led_drv_for_boards$ ls
100ask_imx6ull-qemu_src_bin  board_atk_imx6ull-alpha.c  led_opr.h
100ask_imx6ull_src_bin       board_demo.c               ledtest.c
100ask_stm32mp157_src_bin    board_fire_imx6ull-pro.c   Makefile
am335x_src_bin               board_rk3288.c             rk3288_src_bin
atk_imx6ull-alpha_src_bin    board_rk3399.c             rk3399_src_bin
board_100ask_imx6ull-qemu.c  fire_imx6ull-pro_src_bin
board_am335x.c               leddrv.c
book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv/02_led_drv_for_boards$ vi M                   akefile

book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv/02_led_drv_for_boards$ make all
make -C /home/book/100ask_imx6ull-sdk/Linux-4.9.88 M=`pwd` modules
make[1]: Entering directory '/home/book/100ask_imx6ull-sdk/Linux-4.9.88'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory '/home/book/100ask_imx6ull-sdk/Linux-4.9.88'
arm-buildroot-linux-gnueabihf-gcc -o ledtest ledtest.c
book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv/02_led_drv_for_boards$ ls
100ask_imx6ull-qemu_src_bin  am335x_src_bin               board_fire_imx6ull-pro.c  ledtest
100ask_imx6ull_src_bin       atk_imx6ull-alpha_src_bin    board_rk3288.c            ledtest.c
100ask_led.ko                board_100ask_imx6ull-qemu.c  board_rk3399.c            Makefile
100ask_led.mod.c             board_100ask_imx6ull-qemu.o  fire_imx6ull-pro_src_bin  modules.order
100ask_led.mod.o             board_am335x.c               leddrv.c                  Module.symvers
100ask_led.o                 board_atk_imx6ull-alpha.c    leddrv.o                  rk3288_src_bin
100ask_stm32mp157_src_bin    board_demo.c                 led_opr.h                 rk3399_src_bin
book@100ask:~/nfs_rootfs/drivers_projects/02_led_drv/02_led_drv_for_boards$ cp 100ask_led.ko ledtest ~/nfs_rootfs

对开发板:

fs /mntmx6ull:~]# mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootf
[root@imx6ull:~]# cp /mnt/100ask_led.ko ./
[root@imx6ull:~]# cp /mnt/ledtest ./
[root@imx6ull:~]# echo none > /sys/class/leds/cpu/trigger
-bash: /sys/class/leds/cpu/trigger: No such file or directory报错不影响
[root@imx6ull:~]# insmod 100ask_led.ko
[ 3702.921183] 100ask_led: loading out-of-tree module taints kernel.提示内核污染不影响
[root@imx6ull:~]# lsmod查看是否安装成功
Module                  Size  Used by
100ask_led              3995  0
inv_mpu6050_spi         2320  0
inv_mpu6050            11894  2 inv_mpu6050_spi
evbug                   2282  0
[root@imx6ull:~]# chmod +x ./ledtest
[root@imx6ull:~]# ./ledtest
Usage: ./ledtest <dev> <on | off>
[root@imx6ull:~]# ./ledtest /dev/100ask_led0 on
[root@imx6ull:~]# ./ledtest /dev/100ask_led0 off

http://www.kler.cn/a/541539.html

相关文章:

  • Flutter PIP 插件 ---- Android
  • 火爆的DeepSeek大模型怎么和智能家居结合?
  • 深度学习之神经网络框架搭建及模型优化
  • shell脚本控制——使用新的shell启动脚本
  • 打家劫舍3
  • Centos挂载镜像制作本地yum源,并补装图形界面
  • python动物识别深度学习分析系统
  • 2.1 JUnit 5 测试发现机制详解
  • Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题
  • 什么是动态路由和嵌套路由?
  • Unity快速入门2 - 3D渲染
  • 【Python深入浅出】Python3邂逅MySQL:开启数据交互之旅
  • Python+wxauto:实现电脑端微信程序自动化
  • JDBC数据库连接池及相关练习(学习自用)
  • 云原生周刊:DeepSeek 颠覆人工智能
  • 基于springboot+vue的校园招聘网站的设计与实现
  • 《手札·数转篇》中小制造企业的信息化升级:MES系统的价值与应用
  • mysql 不是内部或外部命令,也不是可运行的程序或批处理文件
  • LeetCode-169多数元素
  • html+canvas地图画布实现快速拖动出现瓦片空白问题优化
  • 网络安全溯源 思路 网络安全原理
  • cppcheck静态扫描代码是否符合MISRA-C 2012规范
  • 1 推荐系统概述
  • 重启电脑之后vscode不见了
  • HTTP协议学习大纲
  • vLLM 安装记录 (含踩坑xformers)