linux 系统下面的驱动与裸机下的驱动不同,不能直接对IO脚进行操作,在linux下面的GPIO脚的读写,只能
通过对其实际地址对应的map地址进行操作。map 通过函数ioremap(StartAddr,Len),实现(StartAddr是实
际起始地址,Len是长度).函数的返回值就是对应的map 地址
对GPIO的读写函数:readl(MapAddr),writel(Value,MapAddr)
linux下面的驱动已经模块化了,make好的驱动可以通过insmod命令调用驱动模块,详情见下面的实例:
/*****************code ***********************/
hello world linux2.6下:
#include < linux/module.h>
#include < linux/config.h>
#include < linux/init.h>
MODULE_LICENSE("GPL"); // 新,否则有 waring, 去掉了 #define MODULE, 自动定义
static int hello_init(void)
{
printk(KERN_ALERT "Hello, worldn");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel worldn");
}
module_init(hello_init);// 必须!!
module_exit(hello_exit); // 必须!!
/***这里没有用到对GPIO的操作,只是个最简单的实例****/
/*********************** end code ***********************/
Makefile文件的编写:
最简单的就一句话:
obj-m:=name.o
编译:
make -C /PATH/linux2.6 SUBDIRS=$PWD modules
PATH指向linux内核文件夹
完成这步之后就会在当前目录下面生成 .ko文件
linux 2.6内核在板子上跑起来之后就可以用insmod命令加载 .ko文件
NFS server配置
我的是在s3c2440+linux2.6.18+fc5下面完成
其中涉及到通过网络口用tftp服务器下载zImage文件,NFS服务器提供文件系统
我的tftp服务器是windows下面的,在linux下面编译好2.6的内核好放到window下面,启动tftp
服务器,将zImage文件放到其服务目录下
NFS server是在linux 下面建立
安装好NFS server包之后,设置/etc/export文件
对其服务目录及mount IP和权限进行配置
我的配置如下:
/home/lwx/linux * (rw,sync,no_root_squash)
目录 允许的IP,*表示任何IP都可以,后面的是权限设置
然后/etc/init.d/nfs start 启动NFS服务器
进入/mnt目录,
mkdir nfs
mount -t nfs 192.168.1.188:/home/lwx/linux /mnt/nfs
192.168.1.188为我的linux 主机IP
此时,将zImage内核文件下载到目标板,运行,就可以看到linux 在 arm 上运行了,文件
系统由NFS server 提供,进入命令行,加载驱动,完成!!