通用的makefile模板
ifeq ($(kernelrelease),)
#kerneldir ?= /home/lht/kernel2.6/linux-2.6.14
kerneldir ?= /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
modules:
$(make) -c $(kerneldir) m=$(pwd) modules
modules_install:
$(make) -c $(kerneldir) m=$(pwd) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.phony: modules modules_install clean
else
obj-m := hello.o
endif
一、簡單的模組
#include #include module_license ("gpl");
int init_module (void)
void cleanup_module (void)
static void __exit hello_2_exit (void)
module_init (hello_2_init);
mo
三、引數的學習
#define driver_author "foobar"
#define driver_desc "a sample driver"
module_license ("gpl");
module_author (driver_author);
module_description (driver_desc);
module_supported_device ("testdevice");
static short int myshort = 1;
static int myint = 420;
static long int mylong = 9999;
static char *mystring = "blah";
static int array[2]= ;
static int arr_argc = 0;
module_param (myshort, short, 0000);
module_parm_desc (myshort, "a short integer");
module_param (myint, int, 0000);
module_parm_desc (myint, "an integer");
module_param (mylong, long, 0000);
module_parm_desc (mylong, "a long integer");
module_param (mystring, charp, 0000);
module_parm_desc (mystring, "a character string");
module_param_array (array, int, &arr_argc, 0000);
//module_param_array (array, int, arr_argc, 0000); //for kernel<2.6.10
module_parm_desc (array, "an array of integers");
static int __init hello_2_init (void)
static void hello_create_proc (void)
五、ioctl#include #include #include #include #include #include #include #include "hello.h"
module_license ("gpl");
int hello_major = 250;
int hello_minor = 0;
int number_of_devices = 1;
char data[128]="\0";
struct cdev cdev;
dev_t dev = 0;
static int hello_open (struct inode *inode, struct file *file)
static int hello_release (struct inode *inode, struct file *file)
int hello_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
return ret;
}struct file_operations hello_fops = ;
static void char_reg_setup_cdev (void)
static int __init hello_2_init (void)
char_reg_setup_cdev ();
printk (kern_info "hello_ioctl driver done\n");
return 0;
}static void __exit hello_2_exit (void)
module_init (hello_2_init);
module_exit (hello_2_exit);
測試程式:
int main (void)
printf ("\n/dev/hello opened, fd=%d\n",fd);
ioctl (fd, hello_one);
ioctl (fd, hello_two);
close (fd);
printf ("/dev/hello closed :)\n");
return 0;
}
從0開始學spark
參考 local 模式 即單機模式,這種安裝加壓即可,具體安裝方法穿插在 standalone 模式 standalone 模式 即搭建 spark 集群,但不與其他框架整合,如 yarn,此時 spark 執行在集群中 基於 yarn 的 spark 集群部署 yarn 集群 spark 集群,此...
學linux,從Ubuntu開始
1.安裝過程出現0x00000000指令引用的0x00000000記憶體該記憶體不能為written 如果你安裝的是inux系統 需要 在設定 系統 處理器 啟用pae支援 我的就是這麼解決的。ubuntu常見命令 路徑相關命令 cd change directory 更改目錄。pwd print ...
從0開始學架構 推薦
程式設計師的成長繞不開架構設計,有時架構設計就像鴻溝一樣擋在程式設計師晉公升之路上,只要跨過去就可以海闊天空。但不少技術能力很強的程式設計師依然不能完全掌握架構設計,這與架構設計的思維方式和訓練機制與寫 有很大差異有關,加之人們對架構設計存在很多誤區,缺乏一套行之有效的架構設計方 就可能導致在實踐過...