2416开发记录二:最简单的helloworld驱动
来源:互联网 发布:微软推荐系统优化软件 编辑:程序博客网 时间:2024/04/29 03:23
1. 编写helloworld驱动程序
驱动程序源码如下:
#include<linux/init.h>#include<linux/module.h>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 <zmurder@outlook.com>");MODULE_LICENSE("Dual BSD/GPL");MODULE_DESCRIPTION("A sample bbblack hello module");MODULE_ALIAS("a sample module");
2. 编写驱动的makefile
根据PC的hellomodule,修改makefile文件,编辑2416的makefile如下:
#Makefile for .cARCH=armCROSS_COMPILE=arm-linux-ifneq ($(KERNELRELEASE),) obj-m := HelloModule2416.oelse#bbblack kernelKERNELDIR ?= /home/zyd/soft/s3c2416/20140409_HELPER2416/Helper2416/source/s3c-linux.jyxPWD := $(shell pwd)modules: make -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modulesmodules_install: make -C $(KERNELDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules_installapp: app.c $(CROSS_COMPILE)gcc -o app app.cclean: $(MAKE) -C $(KDIR) M=$(PWD) cleanendif
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已经完成了。。。。艰难啊!!
- 2416开发记录二:最简单的helloworld驱动
- Linux驱动最简单驱动-------helloworld
- 最简单的Spring HelloWorld
- 使用CXF开发简单的Web Service-HelloWorld(二)
- 使用CXF开发简单的Web Service-HelloWorld(二)
- 驱动开发第一步,入门,最简单的驱动代码编写
- 【Rayeager PX2分享】最简单helloworld驱动编写
- 简单Linux驱动Helloworld的实现
- 最简单的Spring写的Helloworld
- 三星 SMDKC210 开发板的最简单的LED驱动
- 创建最简单的HelloWorld业务规则
- 最简单的Struts 2 HelloWorld
- eclipse的最简单程序HelloWorld
- 深入浅出LDD-1-最简单的helloworld
- linux最简单的内核实例 helloworld
- HelloWorld 最简单的Java程序
- 编写最简单的内核:HelloWorld
- 编写最简单的内核:HelloWorld
- PHP 加密、解密
- Codeforces 614 D Skills
- 代理模式和装饰者模式的区别
- 最大团算法(Maximum Clique)
- phantomjs#1脚本编码问题
- 2416开发记录二:最简单的helloworld驱动
- 运维工程师技能图
- 安卓Spinner用法最简单获取键值对
- mongodb常用命令
- Java 中String的split函数简介
- 【OCR】CentOS7下编译安装tesseract-ocr
- eclipse各种问题汇总
- block与使用变量
- Unity3d 10000 Update() calls 性能优化