2026/3/10 4:33:17
网站建设
项目流程
李沧网站建设电话,企业app开发的公司,网站设计与建设ppt,网站表格代码1.概述在内核源码的顶层目录下#xff0c;输入命令make menuconfig。(无论什么linux源代码#xff0c;还是安卓源代码)这个图像化界面可以配置将驱动编译进内核#xff0c;也可以配置不将这个驱动编译进内核。打开图形化配置界面前#xff0c;先设置环境变量#xff0c;确…1.概述在内核源码的顶层目录下输入命令make menuconfig。(无论什么linux源代码还是安卓源代码)这个图像化界面可以配置将驱动编译进内核也可以配置不将这个驱动编译进内核。打开图形化配置界面前先设置环境变量确定平台的类型。export ARCHarm642.打不开menuconfig的常见问题常见打不来图形界面的问题1.没有安装ncurses2.终端的窗口太小3.没有在内核顶层源码路径下输入make menuconfig3.界面操作驱动状态将驱动编译成模块 用M表示将驱动编译到内核中用*表示不编译使用空格切换搜索/跟rtthread的menuconfig操作一样。其实linux驱动开发和单片机的驱动开发方式跟硬件相关的一模一样。4.容易困扰的一个问题如果要将驱动编译到内核中源码的位置一定在驱动文件夹中而如果只是将驱动编译成模块源码位置可以自己修改准确结论驱动编译到内核中内置编译y选项源码建议 / 通常放在内核源码树的驱动文件夹中如drivers/char/、drivers/misc/等而非 “必须”—— 本质是内核的Kconfig和Makefile要能找到源码只要配置文件路径正确源码也可放在内核树内其他目录但行业惯例是按驱动类型归类到对应drivers/子目录比如字符驱动放drivers/char/SPI 驱动放drivers/spi/。核心要求必须修改内核源码树中的Kconfig添加驱动配置项和Makefile添加obj-y 驱动文件名.o否则内核编译时无法识别该驱动。驱动编译成模块模块编译m选项源码位置完全可以自定义比如你放在/home/workspace/driver/下无需放入内核源码树 —— 这也是嵌入式开发中最常见的方式避免修改内核源码树。核心要求只需在驱动的独立Makefile中指定内核源码路径KERNELDIR、架构ARCH、交叉编译器CROSS_COMPILE即可独立编译出.ko模块无需修改内核的Kconfig/Makefile。补充关键细节避免踩坑1. 内置编译编译到内核的实操要点如果你要把驱动编译进内核步骤是将驱动源码如hello_drv.c复制到内核源码树的对应驱动目录如drivers/char/修改该目录下的Kconfig添加驱动配置项configconfig HELLO_DRV tristate Hello World Driver help A simple char driver for test.修改该目录下的Makefile添加makefileobj-$(CONFIG_HELLO_DRV) hello_drv.o执行make menuconfig找到HELLO_DRV选项并设为y内置再编译整个内核编译后的内核镜像zImage/Image会包含该驱动启动后无需手动加载。2. 模块编译的核心优势为什么更常用无需修改内核源码树驱动源码可放在任意目录如你的/home/workspace/driver/编译速度快仅编译驱动无需编译整个内核可动态加载 / 卸载insmod/rmmod调试方便适合驱动开发阶段迭代效率远高于内置编译。总结驱动内置编译到内核源码 “惯例上” 放在内核drivers/子目录便于管理核心是Kconfig/Makefile要能找到源码路径可自定义但不推荐驱动编译为模块源码位置完全可自定义只需在驱动的Makefile中指定内核源码路径即可嵌入式开发中如 RK356X驱动开发阶段优先用 “模块编译”调试完成后若需随内核启动加载再改为 “内置编译”。