A general "Hello World" src code for linux3.0 driver programing

/* hello.c */
#include <linux/kernel.h>
#include <linux/module.h>
static int hello_init(void)
{
    printk(KERN_ALERT "hello init"\n);
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "hello exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");

A Makefile format before  linux2.6 (will encountered with error: include/linux/linkage.h:5:25: fatal error: asm/linkage.h: No such file or directory)

#Makefile
#Makefile for a basic kernel module
CC=gcc
MODCFLAGS:= -Wall -DMODULE -D__KERNEL__ -DLINUX
INCLUDE:= -IpathToLinuxKernelSrcInclude
hello.o:hello.c
    $(CC) $(MODCFLAGS) $(INCLUDE) -c hello.c
    echo insmod hello.o to turn it on
    echo rmmod hello to turn if off
    echo
    echo X and kernel programming do not mix.
    echo Do the insmod and rmmod from outside X
# Note: A "tab" before "$(CC) xxx" means this is a shell command

A Makefile format as KBuild after linux2.6

# Makefile
obj-m := hello.o# Use "make -C /opt/linux-3.0.4 SUBDIRS=$PWD modules" to compile this driver# insmod hello.ko# cat /proc/modules# lsmod

For KBuild kernel driver programming, pls reference to The Linux Kernel Module Programming Guide

时间: 2024-12-27 20:12:29

A general "Hello World" src code for linux3.0 driver programing的相关文章

A general &quot;About&quot; dialog src code paragraph in Gtk+ programming

GTK_CALLBACK void on_toolbutton_about_clicked(GtkWidget *btn, gpointer user_data) { GtkWidget *about_dialog; GdkPixbuf *logo; GError *error=NULL; const gchar *author[]={"Guan Jiaying"}; about_dialog=gtk_about_dialog_new(); logo=gdk_pixbuf_new_fr

linux-3.0内核移植

1.新建kernel文件夹,用于存放内核文件 [[email protected] ~]$ mkdir kernel 2.进入kernel,上传压并解压压缩文件 [[email protected] ~]$cd kernel [[email protected] kernel]$ tar -xjf linux-3.0.tar.bz2 3.进入linux-3.0 cd linux-3.0 4.修改makefile,配置CPU类型和交叉编译器(195,196行) ARCH ?=arm CROSS_C

Linux3.0.0内核中客体(如文件/目录)相关的DAC安全数据结构(传统9Bit模块、ACL模式)

第1章           FCB数据结构(文件控制块) 1.  目录项 相当于FCB次部,包括两个内容: 即文件名和inode编号, 不同的文件名可能对应同一个inode编号,  这样便对应同一个FCB主部, 即一个文件可以有多个名字. 2.  inode 相当于FCB主部, 包括文件主.共享说明.地址信息等, 称为inode, inode与文件具有一对一的关系. 在UNIX文件系统中, 有一个固定的区域, 用于保存所有文件的inode.每个inode有一个唯一的编号,称为i_number.

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线

MongoDB { code: 18, ok: 0.0, errmsg: "auth fails" } 原因

MongoDB出现 { code: 18, ok: 0.0, errmsg: "auth fails" }  错误的原因: 1.账号密码错误 2.账号不属于该数据库 MongoDB { code: 18, ok: 0.0, errmsg: "auth fails" } 原因,布布扣,bubuko.com

Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938396.html 在基本分析完内核启动流程的之后,还有一个比较重要的初始化函数没有分析,那就是do_basic_setup.在内核init线程中调用了do_basic_setup,这个函数也做了很多内核和驱动的初始化工作,详解

Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】

原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938390.html 在构架相关的汇编代码运行完之后,程序跳入了构架无关的内核C语言代码:init/main.c中的start_kernel函数,在这个函数中Linux内核开始真正进入初始化阶段, 下面我就顺这代码逐个函数的解释,但是这里并不会过于深入

Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938393.html 在分析start_kernel函数的时候,其中有构架相关的初始化函数setup_arch. 此函数根据构架而异,对于ARM构架的详细分析如下: void __init setup_arch(char **cmdlin

S5PV210之添加缺少的-内核提供的&#39;.h&#39;文件 linux3.0.8驱动

怎样解决编译时出现内核提供的函数或变量没有定义,使用source insight搜索功能找到声明的头文件,然后包含该头件就行了: 比如: error: implicit declaration of function 'copy_from_user' 解决:使用source insight搜索功能,可以找到copy_from_user函数是在linux/uaccess.h 头文件中定义,所以包含此头文件就行了. S5PV210之添加缺少的-内核提供的'.h'文件 linux3.0.8驱动,布布扣