原创 Uclinux Hello Module Drivers

2010-1-20 11:08 2407 7 9 分类: MCU/ 嵌入式
Uclinux Hello Module Drivers
By panasonic.lin@163.com


由于linux2.4和linux2.6的区别,ldd第三版讲的都是linux2.6内核的驱动,linux2.4最好参考ldd第二版的。
linux2.6中,hello模块的Makefile:
obj-m := hello.o
然后只需在此目录下执行:
make -C /<your 2.6 kernel's dir> M=`pwd` modules
下面是linux2.4内核的方法,也适用uclinux2.4

1.新建目录hello,建立hello.c和Makefile如下
/*                                                    
 * $Id: hello.c,v 1.5 2009/10/26 03:32:21  $
 */                                                   
#ifndef MODULE
#define MODULE
#endif

#ifndef __KERNEL__
#define __KERNEL__
#endif


#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>


MODULE_LICENSE("GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "Hello,Uclinux world\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, Uclinux world\n");
}

module_init(hello_init);
module_exit(hello_exit);


/**********************************************************************************/
/* $Id: Makefile,v 1.5 2009/10/26 03:32:21 $ */
/***********************************************************************************/

# Change it here or specify it on the "make" command line
CC=arm-elf-gcc
KERNELDIR = /home/panasonic/Data/uClinux-dist20050311/linux-2.4.x
#include $(KERNELDIR)/.config

CFLAGS = -D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -O -Wall


all: hello.o
hello.o:hello.c
    $(CC) $(CFLAGS) -c hello.c
clean:
    rm -f hello.o

2.配置内核,Enable loadable module support,然后重新make生成uclinux_rom.bin,然后再拷贝到tftp下载目录。

点击看大图

3.配置busybox支持insmod,lsmod,rmmod命令,然后make dep,make user_only,make romfs生成romfs目录,把里面bin目录下的文件拷贝到nfs根目录下的bin,因为我们仅仅是比以前多了module的几个程序而已,其他东西大可不必要动。

点击看大图


4.准备好内核和根文件系统后,只需在hello目录下执行make生成hello.o,把它拷贝到nfs文件系统的任意位置。

点击看大图


5.打开minicom
$tftpboot 0xc500000下载内核到内存0xc500000
$bootm 0xc500000启动内核

点击看大图


如果出现如下错误提示,需要在lib目录新建modules/内核版本目录
# insmod ./hello.o
# lsmod
# rmmod hello
rmmod: chdir(2.x.x): No such file or directory
# cd /     
# mkdir -p /lib/modules/`uname -r`
# rmmod hello


文章评论2条评论)

登录后参与讨论

用户1620250 2010-1-21 09:08

别急,我当时想自己交叉编译一个,整整一个星期都没头绪,错误百出。建立交叉编译器有三种方法,第一,自己编译一个,很痛苦;第二:用别人预编译好的,直接拿来就用,这个有好多;第三:借助构建工具,如crosstool,crosstool-ng,scratchbox,这个也很方便,智能。另外,建议读一下“构建嵌入式linux系统“这本书,里面讲的很详细了。出现问题的最大可能就是跟你的主机系统就是linux发行版本有关,建议在todo之前选择一个有前人成功用过的发行版本,如我的是suse11.2。

tengjingshu_112148725 2010-1-20 23:37

我想问一下博主的交叉编译环境怎么建立?我尝试了整整一天也不行啊
相关推荐阅读
用户1620250 2013-06-14 21:21
CIMCOEdit5自动生成轮廓的G代码
做了台全自动的NC数控玻璃切割机,感觉就是一台CNC的雏形了。     不管是哪一类的机床,只要是 NC 加工,零件的加工步骤如下: 1. 分析研究零件图; 2. 选择最合适...
用户1620250 2012-12-30 22:38
STM32 FSMC与FPGA 存储器接口 读写
  STM32 FSMC与FPGA 存储器接口 读写  panasonic.lin@163.com FPG...
用户1620250 2012-01-12 21:33
DSP/BIOS:Cannot create/delete a Clock from Hwi or Swi thread
DSP/BIOS:Cannot create/delete a Clock from Hwi or Swi thread 上篇文章提到Task_sleep睡死的问题解决后,添加了系统心跳cloc...
用户1620250 2012-01-12 21:28
DSP/BIOS:Task_sleep睡死的问题
程序其中的一个任务调用了Task_sleep(100),结果睡死在里面,用ROV查看任务的状态,Blocked阻塞,但是阻塞点是Unknown. 这是因为没有添加clock模块到系统...
用户1620250 2011-12-23 00:55
TI DSP 28335 CCSV4 外置SRAM调试(二)
11.为再次确保万无一失,往外置SRAM读写校验一下   12由于板子设置了从FLASH boot,FLASH内还有程序,debug 在LOAD了程序后自动复位然后运行了flash的...
用户1620250 2011-12-23 00:38
TI DSP 28335 CCSV4 外置SRAM调试(一)
DSP28335有内置256K X 16的FLASH,34K X 16的RAM,但是如果运行一个大一点的系统,如SYS/BIOS,这么小的RAM很难容纳的下,如果在FLASH中调试的话,每次都烧写...
我要评论
2
7
关闭 站长推荐上一条 /2 下一条