xaker1@ubuntu:~/pulse_counter/modules$ ls -la
total 28
drwxrwxr-x 3 xaker1 xaker1 4096 Jun 28 12:39 .
drwxrwxr-x 4 xaker1 xaker1 4096 Jun 27 23:19 ..
-rw-rw-r-- 1 xaker1 xaker1 427 Jun 28 12:36 Makefile
-rw-rw-r-- 1 xaker1 xaker1 636 Jun 28 12:34 md1.c
-rw-rw-r-- 1 xaker1 xaker1 507 Jun 28 12:35 md2.c
-rw-rw-r-- 1 xaker1 xaker1 56 Jun 28 12:35 md.h
drwxrwxr-x 2 xaker1 xaker1 4096 Jun 27 23:20 .tmp_versions
xaker1@ubuntu:~/pulse_counter/modules$ cat Makefile
#CURRENT = $(shell uname -r)
CURRENT = 3.2.0-41-generic-pae
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
TARGET1 = md1
TARGET2 = md2
TARGET3 = md3
obj-m := $(TARGET1).o $(TARGET2).o $(TARGET3).o
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
@rm -f *.o .*.cmd .*.flags *.mod.c *.order
@rm -f .*.*.cmd *~ *.*~ TODO.*
@rm -fR .tmp*
@rm -rf .tmp_versions
disclean: clean
@rm *.ko *.symvers
xaker1@ubuntu:~/pulse_counter/modules$ cat md1.c
#include <linux/init.h>
#include <linux/module.h>
#include "md.h"
MODULE_LICENSE( "GPL" );
MODULE_AUTHOR( "Oleg Tsiliuric <
olej@front.ru>" );
char* md1_data = "ц╟ц┘ ц█ц▓";
extern char* md1_proc( void ) {
return md1_data;
}
static char* md1_local( void ) {
return md1_data;
}
extern char* md1_noexport( void ) {
return md1_data;
}
EXPORT_SYMBOL( md1_data );
EXPORT_SYMBOL( md1_proc );
static int __init md_init( void ) {
printk( "+ module md1 start!\n" );
return 0;
}
static void __exit md_exit( void ) {
printk( "+ module md1 unloaded!\n" );
}
module_init( md_init );
module_exit( md_exit );
xaker1@ubuntu:~/pulse_counter/modules$ cat md2.c
#include <linux/init.h>
#include <linux/module.h>
#include "md.h"
MODULE_LICENSE( "GPL" );
MODULE_AUTHOR( "Oleg Tsiliuric <
olej@front.ru>" );
static int __init md_init( void ) {
printk( "+ module md2 start!\n" );
printk( "+ data string exported from md1 : %s\n", md1_data );
printk( "+ string returned md1_proc() is : %s\n", md1_proc() );
return 0;
}
static void __exit md_exit( void ) {
printk( "+ module md2 unloaded!\n" );
}
module_init( md_init );
module_exit( md_exit );
xaker1@ubuntu:~/pulse_counter/modules$ cat md.h
extern char* md1_data;
extern char* md1_proc( void );
xaker1@ubuntu:~/pulse_counter/modules$ cat /etc/debian_version
wheezy/sid
xaker1@ubuntu:~/pulse_counter/modules$ dpkg -l | grep linux
ii libselinux1 2.1.0-4.1ubuntu1 SELinux runtime shared libraries
ii linux-firmware 1.79.4 Firmware for Linux kernel drivers
ii linux-generic-pae 3.2.0.41.49 Complete Generic Linux kernel
ii linux-headers-3.2.0-41 3.2.0-41.66 Header files related to Linux kernel version 3.2.0
ii linux-headers-3.2.0-41-generic-pae 3.2.0-41.66 Linux kernel headers for version 3.2.0 on 32 bit x86 SMP
ii linux-headers-generic-pae 3.2.0.41.49 Generic Linux kernel headers
ii linux-image-3.2.0-41-generic-pae 3.2.0-41.66 Linux kernel image for version 3.2.0 on 32 bit x86 SMP
ii linux-image-generic-pae 3.2.0.41.49 Generic Linux kernel image
ii linux-libc-dev 3.2.0-48.74 Linux Kernel Headers for development
ii util-linux 2.20.1-1ubuntu3 Miscellaneous system utilities
xaker1@ubuntu:~/pulse_counter/modules$ ls -l /lib/modules/`uname -r`/b*
lrwxrwxrwx 1 root root 43 Apr 25 09:05 /lib/modules/3.2.0-41-generic-pae/build -> /usr/src/linux-headers-3.2.0-41-generic-pae
xaker1@ubuntu:~/pulse_counter/modules$ ls /lib/modules/`uname -r`/build
arch block crypto Documentation drivers firmware fs include init ipc Kbuild Kconfig kernel lib Makefile mm Module.symvers net samples scripts security sound tools ubuntu usr virt