驱动开发之 HelloWorld (for mini2440)

2020-06-28来源: eefocus关键字:驱动开发  HelloWorld  mini2440

开发环境:ubuntu16.04 64bit

Linux内核版本:linux-2.6.32.2


1、编写mini2440_hello_module.c

在/linux-2.6.32.2/drivers/char目录下,编写mini2440_hello_module.c,代码如下:


#include

#include



static int __init mini2440_hello_module_init(void)

{

    printk("Hello yfw, Mini2440 module is installed !n");

    return 0;

}


static void __exit mini2440_hello_module_cleanup(void)

{

    printk("Good-bye yfw, Mini2440 module was removed!n");

}


module_init(mini2440_hello_module_init);

module_exit(mini2440_hello_module_cleanup);

MODULE_LICENSE("GPL");


2、修改Kconfig文件

编辑/linux-2.6.32.2/drivers/char目录下的Kconfig文件(在内核代码树里增加该项),加入如下内容:


config MINI2440_HELLO_MODULE

tristate "Mini2440 module sample"

depends on MACH_MINI2440

default m if MACH_MINI2440

help

  Mini2440 module sample.


3、修改Makefile文件

编辑/linux-2.6.32.2/drivers/char目录下的Makefile文件,加入如下内容:


obj-$(CONFIG_MINI2440_HELLO_MODULE) += mini2440_hello_module.o


4、配置内核

在 linux-2.6.32.2 目录位置运行一下 make menuconfig在 DeviceDrivers -> Character devices 菜单中看到刚才所添加的选项了,我们选择选项意为把该驱动编译成模块。


5、编译模块

到 linux-2.6.32.2 源代码根目录位置,执行 make modules。

编译成功在mini2440_hello_module.c同一目录下可以看到mini2440_hello_module.ko文件,此文件即是我们需要的模块。


6、安装模块

U盘安装:

Linux内核配置对U盘的支持及挂载

将mini2440_hello_module.ko模块拷贝到U盘,插入开发板。


挂载驱动:


insmod  /mnt/udisk/mini2440_hello_module.ko

在这里插入图片描述

卸载驱动:

在这里插入图片描述

常见错误


[root@H3-Studio=W]#insmod ./mini2440_hello_module.ko


Unable to handle kernel paging request at virtual address e1d430b8

pgd = c3a34000

[e1d430b8] *pgd=00000000

Internal error: Oops: 80000005 [#1]

last sysfs file: /sys/devices/virtual/sound/timer/dev

Modules linked in: mini2440_hello_module(+)

CPU: 0    Not tainted  (2.6.32.2-FriendlyARM #11)

PC is at 0xe1d430b8

LR is at sys_init_module+0x98/0x1e0

pc : []    lr : []    psr: 80000013

sp : c3a33f88  ip : 00000000  fp : 00000000

r10: beb16cc8  r9 : c3a32000  r8 : c002a024

r7 : 0000095d  r6 : 001c455c  r5 : 00000000  r4 : bf000090

r3 : 00020074  r2 : 00000001  r1 : 00000000  r0 : 00000000

Flags: Nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user

Control: c000717f  Table: 33a34000  DAC: 00000015

Process insmod (pid: 727, stack limit = 0xc3a32270)

Stack: (0xc3a33f88 to 0xc3a34000)

3f80:                   001dcfd8 0000095d 001c455c 00000000 00000069 beb16cc4

3fa0: 00000080 c0029ea0 00000000 00000069 001dcfd8 0000095d 001c455c 00000000

3fc0: 00000000 00000069 beb16cc4 00000080 beb16cc8 001c455c beb16cc8 00000000

3fe0: 00000001 beb1696c 0001cb5c 000094f4 60000010 001dcfd8 33dc13dc 77dc17c8

Code: bad PC value

---[ end trace 069cf01c0e26c1e1 ]---

Segmentation fault

[root@H3-Studio=W]#


注意:编译内核要和开发板内核一致

关键字:驱动开发  HelloWorld  mini2440 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501353.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:驱动开发之 LED(for mini2440)
下一篇:linux内核配置对U盘的支持 (for mini2440)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

驱动开发之 DM9000 (for mini2440)
;       = { .platform_data = &mini2440_dm9000_platdata, },};38最后需要将dm9000这个平台设备添加到mini2440_devices这个平台设备数组里面,这样才能完成平台设备的注册。static struct platform_device *mini2440_devices[] __initdata = {        /* ... */        &mini2440_device_eth,};2. dm9000驱动修改drivers
发表于 2020-06-28
<font color='red'>驱动</font><font color='red'>开发</font>之 DM9000 (for mini2440)
驱动开发之 LED(for mini2440)
_leds.c同一目录下可以看到mini2440_leds.ko文件,此文件即是我们需要的模块。6、安装模块U盘安装:Linux内核配置对U盘的支持及挂载将mini2440_leds.ko模块拷贝到U盘,插入开发板。挂载驱动:#cd /mnt/udisk#insmod  /mnt/udisk/mini2440_leds.ko卸载驱动:#rmmod  mini2440_leds7、编写应用测试LED驱动led_kz.c源码:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl
发表于 2020-06-28
<font color='red'>驱动</font><font color='red'>开发</font>之 LED(for mini2440)
罗姆与汽车零部件制造商Vitesco合作开发SiC电动汽车驱动
罗姆已与Vitesco Technologies签订了开发碳化硅电动汽车驱动器的协议。Vitesco副总裁Thomas Stierle说:“能源效率在电动汽车中至关重要,由于电池是车辆中唯一的能源,因此必须把因功率转换引起的任何损失降至最低。因此,我们正在模块化电力电子系统中开发SiC组件,为了从电力电子设备和电动机中获得最大效率,我们将使用合作伙伴提供的SiC功率器件,所以我们选择罗姆。”Vitesco已经在开发和测试800V SiC逆变器,旨在同时优化逆变器开关策略和电动机,通过更高的频率和更陡的开关斜率提供更高的开关效率,并减少电动机的谐波损耗。此外,公司还正在研究800V SiC车载电池充电器。 Vitesco表示
发表于 2020-06-09
内核裁剪,arm_mini2440开发板中增删自己写的驱动
1、把编译通过的buttons1711.c文件放入/home/mini2440/linux-2.6.32.2/drivers/char/2、修改Makefile在同一个目录下(第1步中放入.c文件的目录/home/mini2440/linux-2.6.32.2/drivers/char/)打开Makefile:(法1)(不推荐):在obj-y       += 后面加上buttons1711.o然后重新在/home/mini2440/linux-2.6.32.2/中make zImage,再把生成的zImage烧写进开发板就可以用了。(法2)在底下添加(可找原来类似的位置)obj
发表于 2020-05-22
linux-2.6.32在mini2440开发板上移植(17)之按键驱动程序移植
"},{IRQ_EINT19, S3C2410_GPG(11), S3C2410_GPG11_EINT19, 5, "KEY5"},};/*开发板上按键的状态变量,注意这里是’0’,对应的ASCII 码为30*/static volatile char key_values [] = {'0', '0', '0', '0', '0', '0'};/*因为本驱动是基于中断方式的,在此创建一个等待队列,以配合中断函数使用;当有按键按下并读取到键值时,将会唤醒此队列,并设置中断标志,以便能通过 read 函数判断和读取键值
发表于 2020-05-17
linux-2.6.32在mini2440<font color='red'>开发</font>板上移植(17)之按键<font color='red'>驱动</font>程序移植
2416开发记录二:最简单的helloworld驱动
1. 编写helloworld驱动程序驱动程序源码如下:#include#includestatic 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
发表于 2019-01-17
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved