嵌入式驱动编写之简单驱动Hello_word

发布者:mancozc最新更新时间:2021-07-23 来源: eefocus关键字:嵌入式驱动  S3C2440 手机看文章 扫描二维码
随时随地手机看文章

开发环境

BootLoader:u-boot-1.1.6

kernel:linux-2.6.30.4

cpu:S3C2440


步骤

1、编写驱动代码

这应该是最简单的一个驱动了,只在内核打印一下信息,代码如下:


#include

#include


MODULE_LICENSE("GPL");                


static int __init le2440_hello_init(void)

{


    printk("<1>n     Hello,changle_2440!n");

    printk("<1>nThis is first driver program.nn");


    return 0;

}


static void __exit le2440_hello_exit(void)

{

    printk("<1>n     Exit!n");

    printk("<1>nGoodbye changle_2440!nn");

}                                    


module_init(le2440_hello_init);

module_exit(le2440_hello_exit);


MODULE_LICENSE("GPL");

MODULE_AUTHOR("changle");

MODULE_DESCRIPTION("TQ2440 Board First module test");


2、在内核源码中添加对 hello 驱动的支持

修改同目录下的“Kconfig”文件,在 7 行添加如下内容:


#Character device configuration


menu “Character devices”


config le2440_HELLO

tristate “TQ2440 Hello Driver”

depends on ARCH_S3C2440

help

le2440 TQ2440 Hello.


config VT

bool “Virtual terminal” if EMBEDDED

depends on !S390

select INPUT

default y if !VIOCONS


修改同目录下的“Makefile”文件,在 12 行添加如下内容:


#Makefile for the kernel character device drivers.


#This file contains the font map for the default (hardware) font


FONTMAPFILE = cp437.uni

obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o

obj-$ (CONFIG_le2440_HELLO) += le2440_hello.o

obj-$ (CONFIG_LEGACY_PTYS) += pty.o

obj-$ (CONFIG_UNIX98_PTYS) += pty.o

obj-y += misc.o

obj-$ (CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o

consolemap_deftbl.o selection.o keyboard.o


3、配置内核

Device Drivers —>

Character devices —>

< M > TQ2440 Hello Driver


然后再使用命令#make SUBDIR=drivers/char/ modules,然后编译出驱动模块,在内核目录下面的“drivers/char/”目录下面,名为:le2440_hello.ko,将其复制到NFS文件系统中

这个只是编译驱动的一种方法,还可以直接写Makefile,调用内核来编译驱动,其实本质上都一样

采用makefile编译驱动如下:


#Makefile 

ifeq ($(KERNELRELEASE),) 

 

KERNELDIR ?= /home/linux/sky/ker/linux-2.6.30.4/ 

#KERNELDIR ?= /lib/modules/$(shell uname -r)/build 

PWD := $(shell pwd) 

 

modules: 

    $(MAKE) -C $(KERNELDIR) M=$(PWD)  

 

modules_install: 

    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install 

 

clean: 

    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module* modules* 

 

.PHONY: modules modules_install clean 


else

obj-m := le2440_hello.o 

       

endif 


4、加载驱动模块

在这里插入图片描述

遇到了问题

在做这个驱动的时候遇到一个问题

我最开始是把根文件系统烧写到nandflash中的,那样可以正常启动内核并挂载根文件系统。后来我打算用NFS方式挂载文件系统,就把u-boot的bootargs改为了NFS启动,可是后来发现,这样启动不了内核了,如下:

在这里插入图片描述

到开始内核就停止了,后来我怀疑是nandflash中还有文件系统,所以即使设置NFS启动也不行,最后我把nandflash格式化了,在设置NFS启动,就可以了。到底是不是这样呢,希望有大佬可以指点一下。

关键字:嵌入式驱动  S3C2440 引用地址:嵌入式驱动编写之简单驱动Hello_word

上一篇:LCD驱动移植之开机logo
下一篇:USB设备驱动移植之开发板做U盘

推荐阅读最新更新时间:2024-11-04 12:45

基于有机气敏变色材料的传感器系统
  0 引 言   挥发性有机气体的检测在医疗,环保,工业和商业系统中都有广泛的应用,例如环境监测、质量控制以及医疗诊断等,因此发展高灵敏度、高选择性、质量可靠的便携式传感系统用于挥发性有机化合物的检测有很重要的现实意义。近年来,Illinois大学的Kenneth S.Slasliek教授根据一系列在阵列上固定下来的气敏染剂对不同气体的颜色反应,研制出了一种新的气体检测阵列。该阵列对于某一特定的被分析物具有良好的线性响应,对于某一被分析物的混合物也有其相应的响应。这种被其发明者称为“可视嗅觉”的技术很类似于判断石蕊试纸是否从蓝色变到红色,就可判断溶液是否呈酸性一样。因此,该设计基于敏感薄膜阵列的图像识别系统,用于对挥发性有机化合
[单片机]
基于有机气敏变色材料的传感器系统
S3C2440学习笔记一(系统频率以及一些入门级问题)
①MPLL和UPLL有何不同? 对于MPLL使用到MPLLCON,而UPLL使用到UPLLCON寄存器,同属于时钟电源管理单元。MPLLCON地址是0X4C000004,UPLL地址是0X4C000008。MPLL用于CPU及其他外围器件,这里把他理解成单片机的主频就对了,UPLL用于USB。产生FCLK,HCLK,PCLK三种频率。 CLKDIVN时钟分配控制寄存器,地址是0X4C000014,对FCLK分频给UCLK,PCLK,不分频或2分频,CAMDIVN照相机时钟分配寄存器,地址是0X4C000018,也是做一个时钟分配。 ②2440slib.s中出现mrc,bic,mcr,MOV_PC_LR是什么意思,有什么资料学习和
[单片机]
<font color='red'>S3C2440</font>学习笔记一(系统频率以及一些入门级问题)
S3C2440外接SDRAM
CPU提供了一组用于SDRAM的信号: SDRAM时钟有效信号SCKE; SDRAM时钟信号SCLK0/SCLK1; 数据掩码信号DQM0/DQM1/DQM2/DQM3; SDRAM片选信号nSCS0(它与nGCS6是同一引脚的两个功能); SDRAM行地址选通脉冲信号nSRAS; SDRAM列地址选通脉冲信号nSCAS; 写允许信号nWE(它不是专用于SDRAM的). SDRAM内部就是一个存储阵列,先确定一个行,然后确定一个列; SDRAM一般有4个L-Bank. 可以想象SDRA
[单片机]
<font color='red'>S3C2440</font>外接SDRAM
S3C2440、S3C6410、S5PV210中断解析
写完S5PV210的按键中断程序后,我才知道 6410只是一个过渡产品 确实是正确的,为什么这样说呢?下面我就给大家进行详细的阐述: 中断处理过程等等我就不讲了,一期视频里面已经讲得非常详细了,建议大家在学习本章前,把2440和6410的关于中断的视频再看一次。接下来,我就直接对比他们吧: (1).对于2440: 中断向量只出现在start.s开始部分,类容如下: .globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc
[单片机]
嵌入式Linux系统中触摸屏驱动的研究
引言 随着计算机相关技术的发展,嵌入式系统的应用越来越广泛,与人们生活紧密结合。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,不占额外的空间,可靠性高,是最常用的便携式系统的输入设备。特别是电阻式触摸屏结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度,高速传输反应,一次校正,稳定性高,不漂移等特点,因而广泛用于工业控制领域及在室内使用。 1 硬件平台 S3C241
[嵌入式]
基于嵌入式S3C2440的船舶导航系统设计
       文章在以ARMS3C2440为核的硬件平台上应用Linux操作系统开发了船舶导航系统,完成了系统的硬件设计、软件设计、交叉编译环境的建立、引导程序的移植、内核的移植、驱动程序的编写和根文件系统的建立等,实现了系统的功能。         1.前言        集计算机技术、通信技术、微电子技术等多种技术为一体的嵌入式技术进入到了一个飞速发展的阶段,嵌入式系统已被广泛应用到了航空、消费电子、信息家电、网络通信等各个领域。ARMS3C2440ARM是嵌入式处理器是性价比较优秀的芯片,在各个领域的开发应用有着广阔的应用前景。        船舶导航技术也应随着科学技术背景的改变不断地向着高性能稳定性的方面发展,潜
[嵌入式]
基于S3C2440的MiniGUI移植
随着嵌入式系统的迅速发展,图形用户界面(Graphic User Interface,GUI)需求越来越明显。MiniGUI是面向实时嵌入式系统的轻量级图形用户界面支持系统,以轻型、占用资源少、高性能、可配置等特点广泛应用于通信、医疗、工控、电子、机顶盒、多媒体等领域。本文正是针对这种需求,介绍如何在S3C240上移植MiniGUI的全过程。 1 图形用户界面MiniGUI MiniGUI是由原清华大学教师魏永明主持开发的轻量级图形系统,遵循GPL公约。所支持的操作系统已不仅仅限于Linux,它还可以在μCli nux,μC/OS-Ⅱ,eCos和VxWorks等系统上运行。已验证的硬件平台包括Intelx86,ARM(ARM
[单片机]
基于<font color='red'>S3C2440</font>的MiniGUI移植
uboot在s3c2440上的移植(6)
一、移植环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 10)u-boot利用tftp服务下载内核和利用nfs服务挂载nfs文件系统。 知识点: tftp服务的安装与配置及测试; nfs服务的安装与配置及测试; u-boot到kernel的参数传递(重点)。 我们知道使用tftp下载内核和使用nfs挂载文件系统的好处是,当我们重新编译内核或文件系统后不用重新把这些镜像文件再烧录到flash上,而是把
[单片机]
uboot在<font color='red'>s3c2440</font>上的移植(6)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved