Linux下单独编译一个模块.docxVIP

  • 0
  • 0
  • 约2.64千字
  • 约 4页
  • 2021-04-13 发布于天津
  • 举报
Linux 下单独编译一个模块 模块编译及 makefile |字号大2010-05-07 14:38:02| 分类: 个人日记 | 标签: |字号大 周四。 加任务了,调试 GT 系列的串口程序,根据外面出问题 的点位反应的现象描述是, 232 设备死了,应用层重新打开 设备也没有数据接收, 232 中断无增加 初步判断肯定是 232 处理逻辑出了问题,中 断无增加, 说明已经进入某种错误状态了。 我的初步判断是某些错误状态没有处理,导致设备一直 处于错误状态,因为设备使用了发送和接收的fifo 处于错误状态,因为设备使用了发送和接收的 fifo 和中断处 理,我觉得很可能是寄存器 LSR、FSR 等 status 错误位没有 清掉,因为看代码,中断处理过程当中确实也只有响应中断 清掉,因为看代码, 中断处理过程当中确实也只有响应中断 但是不加以处理。 我们的模块全部是编译进内核的,所以如果不升级处 理,是没有办法调试的。现在我能想到的和正在做的就是把 这些模块重新加载, 用 insmod 再次初始化这些模块, 然后去 查看模块寄存器的状态,并争取找到原因。因为一旦变成内 核的模块,很多原来不能操作的资源也就开放了。 现在首先要做的就是编译单独的 .ko 模块,并用 insmod 加载,并在该对应的模块上增加若干可以查询和设置寄存器 状态的操作。 用 make menuconfig 可以修改模块编译方式、进内核、 预留模块方式或者完全不在内核工程中编译。 1,首先如果选择预留模块方式编译, make uImage 不会 把该模块编译进内核,但是会把模块用 make module 的方式 编译出来,可以 insmod 了直接。 2,如果想脱离原来的内核,建立单独的工程,写自己 的 makefie 单独编译成模块, 需要这么做。 a, 把需要的 .c 和对 应要包含的.h文件拉出来单独放在一起。 b,写一个 makefile , 它很可能是这样子的: obj-m := davinci_rs232_uart1.o #kernel_dir := /lib/modules/$(shell uname -r)/build kernel_dir := /home/driver_zhangm/ti-davinci_DMEM/ pwd := $(shell pwd) all: $(MAKE) -C $(kernel_dir) M=$(pwd) modules 至于为什么是这样子的,我暂时还不理解。只能说一下我当 前的理解。 首先,目标文件必须定义为 obj-m = %.c 文件对应的 %.o 文件, obj-m 不能换成其他类似 bin 之类的名字, 试过了不行, %也 必须完全匹配。有没有其他替代方法暂时不知道。只能确定 这些要求是内核 makefie 定义的环境变量要求的。 其次,内核 dir 指定了编译内核的目录路径。如果要编译成 直接加载到当前操作系统能够运行的模块就采用注释掉那 行路径。否则就要采用当前运行的 uImage 编译的路径 再者 pwd 制定了放置目标文件的路径,最后一行是执行命 令,采用之前定义的内核路径、 环境变量的 MAKE 和放置路 径等就可以了 Linux 下单独编译一个模块声明:本文综合 些网络文摘而成一,引例:比如声卡 Irq 和 IO 不对 ,可到 /usr/src/linux/drivers/sound 目录下 . gcc -o configure configure.c ./configure 选好 IO,IRQ 等等 , make cp sound.o /lib/modules/2.0.34/misc rmmod sound insmod sound init_trace=1 测试一下 . 直到成功为止 . 这样可比在 /usr/src/linux 下 , make menuconfig ; make dep;make clean;make zImage; 好多了 . 二,另外几篇 文章的总结:尝试编译一个 CMI 的声卡驱动模块 1.在 /usr/src/linux-xxxx/configs 目录下有若干编译内核所用的配 置。我们每次保存的配置存放于此,选择我们想要的配置, 将它复制到 /usr/src/linux-xxxx 目录下,改名为 .config 。 cp /usr/src/linux-xxxx/configs/kernel-2.4.19-arm.config /usr/src/linux-xxxx/.config 在 /usr/src/linux-xxxx/ 目录下 的.config文件中,能看到 CONFIG_XXXX_XXXX = y或者 #CONFIG_XXXX_XXXX

文档评论(0)

1亿VIP精品文档

相关文档