eATM

linux编译调试内核模块脚本

源文件:pppoe_easy.c

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

//模块参数
static char *lan= "ens33";
static char *wan= "ens38";
module_param(lan,charp,S_IRUSR);
module_param(wan,charp,S_IRUSR);


//模块加载时运行此函数
int easy_pppoe_init(void)                           //模块入口点没有传入参数(void)
{
    printk(KERN_INFO "Loading Module\n");
    return 0;                                   //模块入口点必须返回int,0:成功  !0:失败
}

//模块删除时运行此函数
void easy_pppoe_exit(void)                          ////模块离开点没有传入参数(void)
{
    printk(KERN_INFO "Removing Module\n");
}

//用于注册模块入口点和出口点的宏
module_init(easy_pppoe_init);                       //模块入口点
module_exit(easy_pppoe_exit);                       //模块离开点
MODULE_LICENSE("GPL");                              //模块证书
MODULE_DESCRIPTION("easy pppoe Module");            //模块描述
MODULE_AUTHOR("eatm.app");                          //模块作者



//查看调试输出信息
//cat /proc/kmsg
				
			
Makefile
				
					obj-m := easy_pppoe.o

all:
	make -C /usr/src/linux-headers-$(shell uname -r)/ M=$(shell pwd) modules
clean:
	make -C /usr/src/linux-headers-$(shell uname -r)/ M=$(shell pwd) clean

				
			
内核模块调试脚本
				
					#!/bin/sh

#内核模块调试脚本

#此模块流程 卸载模块->[编译make->]->加载模块->查看调试输出->卸载模块

#使用方法
# ./run.sh [1] 设置参数1则先编译

module_name="easy_pppoe"

#检测返回值
check_result(){
    if [ $1 -ne 0 ]; then
        echo $2"失败"
        exit 1
    else
        echo $2"完成"
    fi
}

#卸载模块
uninstall_module(){
    test=`lsmod | grep $1`                  #先判断模块是否被加载
    if [ ${#test} -ne 0 ]; then
        echo "卸载模块..."
        rmmod $1".ko"
        check_result $? "卸载模块"
    fi
}

#不出错误则不输出运行程序
run_app(){
    echo $2"..."
    cmd_str=`$1`
    out_str=$cmd_str
}

#拦截脚本中断.
trap 'on_exit' INT
on_exit () {
    #卸载模块
    uninstall_module $module_name
}

#先卸载模块
uninstall_module $module_name


#需要编译...
if [ $# -gt 0 ] && [ $1 -eq 1 ]; then
    run_app "make" "编译模块"
fi

run_app "insmod $module_name.ko" "加载模块"

#查看调试输出.
echo "调试输出..."
cat /proc/kmsg
				
			

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注