开发环境
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启动,就可以了。到底是不是这样呢,希望有大佬可以指点一下。
上一篇:LCD驱动移植之开机logo
下一篇:USB设备驱动移植之开发板做U盘
推荐阅读最新更新时间:2024-11-04 12:45
设计资源 培训 开发板 精华推荐
- 采用 FRAM 微控制器实现的水表
- 20.1.6下午MP2303ADN-1810300131-杨嘉钰
- TA8271H 最大功率 41W BTL x 4Ch 音频功率的典型应用
- LTC2862ACDD-2 网络的典型应用,用于针对 5kV 浪涌、5kV EFT 和 30kV IEC ESD Plus ±360V 过压保护的 IEC 4 级保护
- LTM4608AMPV 2.7V 至 5.5V 输入至 1.8V 输出 DC/DC 稳压器的典型应用电路
- [烂尾工程处理]-X-track_1.54
- 简易移动电源
- Starfish:采用RP2040和TMC2209的元器件拾放的电机控制板开源项目
- USB3.X测试板
- 无线话筒