judejie82 2009-04存档 - 笨杰的个人空间 - 51Testing软件测试...

来源:百度文库 编辑:神马文学网 时间:2024/04/29 10:36:14
笨杰的个人空间

copy Bookmark http://www.51testing.com/?238554

  • 日志
  • 相册
  • 文件
  • 书签
  • 好友
  • 论坛
  • 留言
空间管理 您的位置: 51Testing软件测试网 » 笨杰的个人空间 » 2009-04存档

发布新日志

  • 我的日志
  • 我的足迹
  • 我的收藏
  • 个人日志
  • Linux系统(无QT)
  • WMware
  • Linux驱动
  • Linux(含QT)
  • MiniGUI
  • 视频采集
  • Linux内核模块参数权限

    2009-04-26 19:38:55

    Linux内核模块参数权限

    在进行linux内核模块编程时,常常需要给模块传递参数,其作用是从使用的设备号到驱动应当任何操作的几个方面. 例如, SCSI 适配器的驱动常常有选项控制标记命令队列的使用, IDE 驱动允许用户控制 DMA 操作. 如果你的驱动控制老的硬件, 还需要被明确告知哪里去找硬件的 I/O 端口或者 I/O 内存地址. 内核通过在加载驱动的模块时指定可变参数的值, 支持这些要求.
           参数常常被声明为一个静态全局变量,如static int num=10;然后使用module_param(参数名,参数类型,参数读写权限)为模块定义一个参数,例如:
    module_prarm(num,int,S_IRUGO);
    这样你就可以在insmod(装载模块)的时候为参数指定值,如果没有指定则使用默认值,例如上面的num=10,则10是参数num的默认值。下面以一个例子说明:
    #include
    #include
    MODULE_LICENSE("Dual BSD/GPL");
    static int num=10;
    module_param(num,int,S_IRUGO);
    static int hello_init(void)
    {
        printk("Hello module init.\n");
        printk("num=%d\n",num);
        return 0;
    }

    static void   hello_exit(void)
    {
        printk("Goodbye module exit.\n");
    }

    module_init(hello_init);
    module_exit(hello_exit);

    MODULE_DESCRIPTION("a simple module");
    MODULE_ALIAS("hello");
    将以上代码保存为文件hello.c,编写Makefile文件对其进行编译:
    # Makefile2.6
    ifneq ($(KERNELRELEASE),)
    obj-m := hello.o
    else
    PWD  := $(shell pwd)
    KVER ?= $(shell uname -r)
    KDIR := /lib/modules/$(KVER)/build
    all:
        $(MAKE) -C $(KDIR) M=$(PWD)
    endif
    然后make就可以了,make会生成:
    |-- Module.symvers
    |-- built-in.o
    |-- hello.ko
    |-- hello.mod.c
    |-- hello.mod.o
    `-- hello.o
    这些文件,其中的hello.ko就是编译生成的模块,使用insmod将hello.ko模块装载进内核,这个需要超级用户权限,我的系统是ubuntu7.10,所以使用如下命令装载:
    sudo insmod hello.ko num=20
    使用dmesg命令查看运行结果:
    xiyoulinux@xiyoulinux-desktop:~/module$ dmesg #实际上是读取/var/log/messages文件的内容
    ... #省略以前的信息
    [14801.675260] Hello module init.
    [14801.675265] num=20
    这就是运行结果。如果你插入的是sudo insmod hello.ko,那么:
    使用dmesg命令查看运行结果:
    xiyoulinux@xiyoulinux-desktop:~/module$ dmesg #实际上是读取/var/log/messages文件的内容
    ... #省略以前的信息
    [14801.675260] Hello module init.
    [14801.675265] num=10 #取默认值
    以上是内核模块的编译和运行情况,实际上你还需要用到lsmod(查看模块是否被插入,一般在打印出来的第一行里)、rmmod(卸载装载的模块,只有当模块的引用计数为0时才能被卸载)等命令。
           那么实质上当你装载模块hello.ko时,系统会在/sys/module下生成一个hello文件夹:

    xiyoulinux@xiyoulinux-desktop:/sys/module/hello$ tree
    .
    |-- holders
    |-- initstate
    |-- parameters
    |   `-- num
    |-- refcnt
    |-- sections
    |   |-- __param
    |   `-- __versions
    `-- srcversion

    3 directories, 6 files
    其中parameters目录中就存放的是该模块的参数,一个参数对应一个文件,文件的内容为参数的默认值例如:
    xiyoulinux@xiyoulinux-desktop:/sys/module/hello/parameters$ tree
    .
    `-- num

    0 directories, 1 file
    xiyoulinux@xiyoulinux-desktop:/sys/module/hello/parameters$ cat num
    10

    在module_param(num,int,S_IRUGO);
    定义参数时,其中的参数读写权限S_IRUGO其实是对参数文件的读写权限,所以权限的设置值就和对文件的设置值一样,例如上面对num参数权限的设置S_IRUGO就是对所有用户具有读的权限,而S_IRUGO|S_IWUSR 则允许 root 来改变参数。

  • VMware linux 在2.4.20-8 中编译2.6.15.5 内核

    2009-04-26 17:13:22

    软件准备:

    gcc-3.2.2-5.i386.rpm  :用来编译

    ncurses-5.6.tar.gz:用来配合make menuconfig 命令配置内核

    bison-2.4.tar.gz :语法解析器

    flex-2.5.35.tar.bz2 :词法解析器

    m4-1.4.9.tar.gz: 

     

    modutils-2.4.26.tar.bz2 : http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/

    module-init-tools-3.2.2.tar.bz2:  2.6配套工具包

    http://www.kernel.org/pub/linux/utils/kernel/modutils/v2.4/

     

    linux-2.6.15.5.tar.bz2 : 内核源码包

     

    第一步:

        将上面所有软件都拷贝到虚拟机中(非/mnt下)

    第二步:

        将内核源码包linux-2.6.15.5.tar.bz2 放入/usr/src目录中,并用 tar -jxvf linux-2.6.15.5.tar.bz2 将其解压

        ,然后用命令将linxu符号连接映射到linux-2.6.15.5 :ln -s  linux-2.6.15.5  linux

    第三步:rpm -ivh gcc-3.2.2-5.i386.rpm 安装GCC

    第三步:安装ncurses-5.6.tar.gz

               tar zxvf  ncurses-5.6.tar.gz   

               进入解压后目录 ./configure 

               make 

               make install  安装

    第四步:安装bison-2.4.tar.gz

                ./configure --prefix=/usr
                 make

                 make check  :本软件包自带测试套件,能执行一些测试,以确定它是否编译正确

                 make install

    第五步:安装flex-2.5.35.tar.bz2

    ./configure --prefix=/usr &&
    make &&
    make install

    一些程序并不知道flex而是试图寻找lex程序(事实上,flex是实现lex功能的另一种也是更好的选择)。为了满足少数一些程序的需要,我们将创建一个lex脚本,这个脚本调用flex并通过它来模仿lex的输出文件命名惯例。

    通过下面的命令创建一个新文件 /usr/bin/lex : 

    cat > /usr/bin/lex << "EOF"
    #!/bin/sh
    # Begin /usr/bin/lex

    exec /usr/bin/flex -l "$@"

    # End /usr/bin/lex
    EOF
    chmod 755 /usr/bin/lex

     

    第六步:升级m4

    首先要卸载原来的m4,然后再安装新的m4

     

    ./configure --prefix=/usr

                 make

                 make check  :本软件包自带测试套件,能执行一些测试,以确定它是否编译正确

                 make install

     

    第七步:安装modutils-2.4.26.tar.bz2 (如果原来安装了modutils 需要将其卸载:rpm -e --nodeps modutils)

    (由于Linux2.6内核的内核模块处理过程有所改变,因此Linux2.4内核下的modutils工具包已不在适合Linux2.6内核).

     ./configure &&
    make &&
    make install

    (参照:http://docs.huihoo.com/lfs/lfs-4.0/chapter06/modutils.html)

    第八步:安装module-init-tools-3.2.2.tar.bz2

    tar -jxvf module-init-tools-3.2.2.tar.bz2

    ./configure --prefix=/sbin

    make

    make install

    ./generate-modprobe.conf /etc/modprobe.conf

     

    第九步:配置内核

    make menuconfig

     

    第十步:编译内核

    make bzImage (生成使用gzip压缩的内核,生成的文件位于/usr/src/linux/arch/i386/boot目录)

    make modules modules_install(编译内核模块并安装到/lib/modules/2.6.15.5目录)

judejie82

用户菜单

  • 给我留言
  • 加入好友
  • 发短消息
  • 我的介绍
  • 论坛资料
  • 空间管理

我的栏目

  • 个人日志
  • Linux系统(无QT)
  • WMware
  • Linux驱动
  • Linux(含QT)
  • MiniGUI
  • 视频采集

标题搜索

我的存档

  • 2009年04月
  • 2009年03月
  • 2009年02月
  • 2009年01月

数据统计

  • 访问量: 552
  • 日志数: 31
  • 图片数: 1
  • 建立时间: 2009-01-07
  • 更新时间: 2009-04-26

RSS订阅

Open Toolbar
judejie82 2009-04存档 - 笨杰的个人空间 - 51Testing软件测试... QTP中设置共享对象库 - xiaonan的个人空间 - 51Testing软件测试网 5... 51Testing软件测试网:谈软件测试的心得 kelly_yan 我的回复 - 西鼠的个人空间 - 51Testing软件测试网 - Powered by X-Space mantis安装指南(原创) - davidzz的个人空间 - 51Testing软件测试网 - Powered by X-Space 测试人员容易遗漏一些隐藏的缺陷(转) - snow_sx1224的个人空间 - 51Testing软件测试网 - Powered by X-Space 什么是可用性测试? - 51Testing软件测试网-中国软件测试人的精神家园 LoadRunner进程和线程设置 - 51Testing软件测试网-中国软件测试人的精神... QTP的对象封装与运作原理(转载) - mcy16的个人空间 - 51Testing软件测... Loadrunner关联 - Becky的测试收纳箱 - 51Testing软件测试网 -... 51Testing软件测试论坛 - [灌水专区] - 34种鸡蛋的做法---软件测试,软件质量工程师的家园 51Testing软件测试网:系统性能测试方案 51Testing软件测试网:测试需求点不是很难做 51Testing软件测试网:测试缺陷分析务实篇 51Testing软件测试网:系统性能测试方案 TestDirector介绍 - April测试家园 - 51Testing软件测试网 -... 51Testing软件测试论坛 - [软件测试新手上路] - 测试入门书籍大评论---软件测试,软件质量工程师的家园 美职业顾问公布15个谷歌面试题 - 51Testing软件测试网-中国软件测试人的精神家园 QTP与QC的完美结合实现自动化测试框架-业务组件测试 - 51Testing软件测试网-... web测试的一些经验分享 - [软件测试新手上路] - 51Testing软件测试论坛 软件测试 | 软件缺陷跟踪 | 软件配置工具 | 测试用例设计 | Web测试 | 自动化测试工具 - Powered by Discuz! 51Testing软件测试网:TD中Case的复用 51Testing软件测试网:TestDirector用户手册(续1) 51Testing软件测试网:测试报告编写指南 QTP - evergreen_wang - 51Testing软件测试网 - Power...