历史上的今天
今天是:2025年01月17日(星期五)
2019年01月17日 | 2416开发记录二:最简单的helloworld驱动
2019-01-17 来源:eefocus
1. 编写helloworld驱动程序
驱动程序源码如下:
#include
#include
static int hello_init(void)
{
printk(KERN_INFO "BBBlackHelloModule enter!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO "BBBlackHelloModule exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Zhao Yidong
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("A sample bbblack hello module");
MODULE_ALIAS("a sample module");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2. 编写驱动的makefile
根据PC的hellomodule,修改makefile文件,编辑2416的makefile如下:
#Makefile for .c
ARCH=arm
CROSS_COMPILE=arm-linux-
ifneq ($(KERNELRELEASE),)
obj-m := HelloModule2416.o
else
#bbblack kernel
KERNELDIR ?= /home/zyd/soft/s3c2416/20140409_HELPER2416/Helper2416/source/s3c-linux.jyx
PWD := $(shell pwd)
modules:
make -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
modules_install:
make -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules_install
app: app.c
$(CROSS_COMPILE)gcc -o app app.c
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
3. 编译
执行make modules时出现错误 ERROR: Kernel configuration is invalid.
原来是需要先编译内核
好吧,到内核目录/home/zyd/soft/s3c2416/20140409_HELPER2416/Helper2416/source/s3c-linux.jyx执行命令
make ARCH=arm CROSS_COMPILE=arm-linux- zImage
注意一定要指定目标和编译器。否则编译出来就是x86的了。
编译完内核之后再编译hellomodule就可以了。
但是将编译号的hellomodule.ko驱动文件下载到开发板上运行又出错了,貌似是内核又不一致。我草!!!!!!!!
怎么解决呢?
从原因入手,提示的是开发板的内核和驱动编译的内核不一致导致的,
开发板的内核使用 uname -r 命令查看如下
[root@jyxtec /root]# uname -r
3.2.50+
在开发板启动时有一下信息打印
Linux version 3.2.50+ (d02cj@LinuxServer0) (gcc version 4.4.6 (crosstool-NG 1.14
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
查看驱动的信息如下
modinfo HelloModule2416.kofilename: HelloModule2416.ko
alias: a sample module
description: A sample bbblack hello module
license: Dual BSD/GPL
author: Zhao Yidong zmurder@outlook.com
depends:
vermagic: 3.2.50 mod_unload ARMv5 p2v8
驱动的内核和开发板的内核是不一致。因为自己在编译驱动前编译了内核(为啥要先编译内核?不先编译内核不让编译驱动啊!!!)。编译出来的内核和开发板上的内核是不一致的!!!!(万恶的开发板商啊,提供的内核编译出来和实际使用的不一样!!)
好吧,知道了原因就好解决了。
使用FTP(前提是配置好FTP)将自己编译的内核zImage使用ftp下载到开发板中(参考君益兴开发板手册的3.3.4节,下载,擦出,烧写,指定加载。)
4. 安装卸载驱动
这时再使用insmod就可以了!!!哈哈哈哈!!
但是问题又出来了,使用rmmod卸载驱动时提示(原因是busybox 不同于发行版 linux 安装,没有生成相应的目录)
rmmod: chdir(3.2.50): No such file or directory
好吧,解决方法如下:
建立一个目录: mkdir -p /lib/modules/$(uname -r)
将自己的驱动拷贝到这个目录下即可
至此,HelloModule已经完成了。。。。艰难啊!!
史海拾趣
|
有以下几个问题: 1、有功功率都可以转换为除热能之外的其他什么形式的能,转换为其他形式的能又如何计算,比如热能是I^2R,其他形式的能有没有计算方法。 2、无功功率是不是最终还要回到电源处。… 查看全部问答> |
|
int request_dma(unsigned int dmanr, const char * device_id) 参数dmanr是从0~3、5~7里面的随便挑一个就行了么? 还是需要怎么做来得到啊… 查看全部问答> |
|
共享很多通信好资料! 刚发现一个通信的论坛,内容蛮不错的,加散分喽~ 很多资料啊,都是免费的 无线通信部分: 无线通信基础 http://www.itgoal.net/viewthread.php?tid=6982&extra=page%3D1 天线基本知识及应用 http://www. ...… 查看全部问答> |
|
本人由于毕业设计的需要,目前只有英文资料,哪位大虾有关于Z80的中文资料或相关的文档,小弟不胜感激. 有的话 请发邮箱 lbp213213@sina.com 与我联系… 查看全部问答> |
|
Windows XP + VC 6.0 + WinXP_DDK + DriverStudio 3.2 1·前言 开发windows内核驱动程序是一个非常具有挑战性的工作,你得忍耐调试过程中操作系统 不断蓝屏、不断崩溃的噩梦,所以强烈建议你采用虚拟机做开发平台,这样即使把整个系统都搞蹦了,大不了从新装过虚拟机而已。那么搭建一个完整的 Windows ...… 查看全部问答> |
|
Lm3s8962 Lwip #include .c文件 不足 首先感谢EEWorld 网站提供的LM3S8962的开发板,由于春节放假,板子一直没有研究。现在回到工作岗位上,才开始研究开发板。 申请这块开发板的主要原因是看重LM3S8962使用网络功能不需要外加芯片的好处,一可以节约成本,二可以减少走线,所以就 ...… 查看全部问答> |
|
我手上有LM3S811的评估板,正在用来做我的毕业设计,驱动16*64点阵,想用8个IO口控制154和595的行列扫描实现点阵屏显示16*16的汉字,实现左移,右移,上移,下移等多种滚屏方式,主要就学习GPIO这块,首先实现一个LED的闪烁,再是流水灯等其他外设 ...… 查看全部问答> |
|
这几天一直在看F28035的文档资料以及摸索CCS4的编程。还要考虑数字电源的处理方法。第一次用TI的CPU,第一次用TI的编译器,要掌握它需要花些功夫啊。 关于ADC的处理,经过近来所看的ADC、PWM、CLA等部分的知识,认为选择附件中的 ...… 查看全部问答> |




