历史上的今天
返回首页

历史上的今天

今天是: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已经完成了。。。。艰难啊!!


推荐阅读

史海拾趣

Decawave公司的发展小趣事

作为一家技术驱动的公司,Decawave始终将创新作为公司发展的核心动力。公司不断投入研发资源,推动UWB技术的升级和演进。通过不断的技术创新和产品升级,Decawave的UWB技术不断取得新的突破和进展,为电子行业的发展注入了新的活力。同时,公司也积极关注市场动态和客户需求的变化,不断调整和优化其产品和解决方案,以更好地满足客户的需求和期望。

High Voltage Semiconductor Inc公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,美高测始终保持着对技术创新的执着追求。公司不断投入研发资源,探索新的测试技术和应用场景,如微电网、新能源汽车等领域的高压半导体测试。同时,美高测还积极构建开放式的创新生态体系,与众多合作伙伴共同推动行业的进步和发展。通过这些努力,美高测在高压半导体测试领域持续保持着领先地位,为电子行业的未来发展贡献着重要力量。

Advanced Electronic Packaging公司的发展小趣事

随着公司技术的不断进步,Advanced Electronic Packaging公司开始寻求与行业内知名厂商的合作机会。通过与一家全球领先的电子产品制造商达成战略合作,公司成功将其先进的封装技术应用于对方的高端产品线中。这一合作不仅提升了合作双方的产品竞争力,还为Advanced Electronic Packaging公司带来了可观的利润回报。此后,公司陆续与多家知名企业建立了合作关系,进一步巩固了其在电子封装领域的市场地位。

EVER-WAY公司的发展小趣事

作为一家有社会责任感的企业,EVER-WAY公司始终关注环境保护和社会公益事业。公司积极推行绿色生产理念,采用环保材料和节能技术,减少生产过程中的污染和能耗。同时,公司还积极参与社会公益活动,捐款捐物支持灾区重建、教育扶贫等事业。这些社会责任的担当不仅体现了公司的良好形象,也为公司赢得了社会的广泛赞誉和尊重。

Bias Power公司的发展小趣事

随着全球化进程的加速,Bias Power公司积极寻求国际合作,以拓展更广阔的市场。公司与国际知名电子企业建立了战略合作关系,共同研发新产品,分享技术和市场资源。通过国际合作,Bias Power公司成功打入欧洲、亚洲等多个地区的市场,实现了业务的快速增长。

此外,Bias Power公司还积极参与国际展览和交流活动,展示其最新技术和产品,与全球同行进行深入交流。这些活动不仅提升了公司的知名度,还为公司的进一步发展奠定了坚实基础。

CWIND公司的发展小趣事

随着全球对环保和可持续发展的重视程度不断提高,CWIND公司积极响应这一趋势,将绿色环保理念融入到产品研发和生产过程中。公司投入大量资金和资源,研发出了一系列符合环保标准的电子产品,并优化了生产工艺,减少了废弃物和污染物的排放。这一举措不仅提升了CWIND的品牌形象,还为公司赢得了更多的市场份额。

问答坊 | AI 解惑

送分100分:关于有功功率

有以下几个问题: 1、有功功率都可以转换为除热能之外的其他什么形式的能,转换为其他形式的能又如何计算,比如热能是I^2R,其他形式的能有没有计算方法。 2、无功功率是不是最终还要回到电源处。…

查看全部问答>

request_dma()函数中第一个参数是怎么得到?

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单片机的中文资料

本人由于毕业设计的需要,目前只有英文资料,哪位大虾有关于Z80的中文资料或相关的文档,小弟不胜感激. 有的话 请发邮箱 lbp213213@sina.com 与我联系…

查看全部问答>

Windows XP + VC 6.0 + WinXP_DDK + DriverStudio 3.2

1·前言 开发windows内核驱动程序是一个非常具有挑战性的工作,你得忍耐调试过程中操作系统 不断蓝屏、不断崩溃的噩梦,所以强烈建议你采用虚拟机做开发平台,这样即使把整个系统都搞蹦了,大不了从新装过虚拟机而已。那么搭建一个完整的 Windows ...…

查看全部问答>

Lm3s8962 Lwip #include .c文件 不足

首先感谢EEWorld 网站提供的LM3S8962的开发板,由于春节放假,板子一直没有研究。现在回到工作岗位上,才开始研究开发板。 申请这块开发板的主要原因是看重LM3S8962使用网络功能不需要外加芯片的好处,一可以节约成本,二可以减少走线,所以就 ...…

查看全部问答>

关于DCO

请问仅通过内部DCO(不使用外部高速晶振),可以使得系统时钟达到8M吗?430datasheet上说通过在P2.5上外接100K电阻可以,不知道有人验证过没有? …

查看全部问答>

LM3S811怎样很熟练的控制其GPIO口

我手上有LM3S811的评估板,正在用来做我的毕业设计,驱动16*64点阵,想用8个IO口控制154和595的行列扫描实现点阵屏显示16*16的汉字,实现左移,右移,上移,下移等多种滚屏方式,主要就学习GPIO这块,首先实现一个LED的闪烁,再是流水灯等其他外设 ...…

查看全部问答>

《全数字TI方案电源》ADC处理时间的安排

这几天一直在看F28035的文档资料以及摸索CCS4的编程。还要考虑数字电源的处理方法。第一次用TI的CPU,第一次用TI的编译器,要掌握它需要花些功夫啊。     关于ADC的处理,经过近来所看的ADC、PWM、CLA等部分的知识,认为选择附件中的 ...…

查看全部问答>