存档

文章标签 ‘内核’

Linux(ubuntu)下开发并添加内核模块

2011年11月15日 sigma 没有评论 9,494 views

首先,大致有以下一些地方需要用到Linux内核编程:

  • 驱动开发,linux下的大部分驱动都是以内核模块的形式执行的。
  • 使用了一些特权指令的程序,比如wrmsr这些指令,这些指令需要在ring0下执行,一般这种程序也是以内核模块的形式执行。

下面简要介绍一下,一个Hello world的内核模块开发并且添加的过程(其实网上很多教程,但是发现都是针对比较老的内核,有些已经不适用了,因此,在此处,我在罗唆一下,也当是个备忘)。

  1. 首先需要安装开发库和头文件。
    $:sudo apt-get install linux-kernel-devel
    $:sudo apt-get install linux-headers-`uname -r`
  2. 写个hello_kernel.c(我保留了我代码中的获取cpuID的代码,所以严格不算helloword了),下面代码中printk是内核中的printf,打印的信息回打到内核log中,可以通过dmesg或者cat /var/log/kern.log查看。module_init以及module_exit分别为内核进入以及退出的函数。
    #include <linux/module.h>
    //#include <linux/config.h>//这个头文件在老的内核中有,新的内核已经没有了,因此注释调
    #include <linux/init.h>
    
    void bcopy(unsigned char *src,unsigned char *des,int count)
    {
    	int i=0;
    	for (i=0;i<count;i++)
    	{
    	  printk("src[%d]=%x\n",i,src[i]);
    	  des[i]=src[count-i];
    	}
    
    } 阅读全文...

Linux下查看并设置CPU频率

2011年11月5日 sigma 4 条评论 10,107 views

在Linux下,可通过cpufreq-info,cpufreq-info,cpufreq-selector等命令来查看以及设置CPU的频率。
这些命令加载了内核的acpi_cpufreq模块,可通过以下命令查看是否加载。

lsmod | grep "acpi_cpufreq"

其中cpufreq-info的输出示例信息如下:

analyzing CPU 7:
  driver: acpi-cpufreq
  CPUs which need to switch frequency at the same time: 7
  hardware limits: 1.20 GHz - 2.13 GHz
  available frequency steps: 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz, 1.47 GHz, 1.33 GHz, 1.20 GHz
  available cpufreq governors: ondemand, userspace, performance
  current policy: frequency should be within 1.20 GHz and 2.13 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1.20 GHz.

上面给除了当前CPU的频率范围,频率的策略,以及整个CPU可是设置的频率。
其中governor就是CPU频率的策略,上面列出的CPU有三种策略,onemand(表示系统可以通过动态调整频率,降低功耗,具体的调整策略和内核的功耗管理算法有关),userspace(表示用户可以自己设定cpu的频率),performance(表示CPU总是在最高主频下工作)。

可通过cpufreq-set以及cpufreq-selector来设置CPU的频率以及策略。
cpufreq-set的用法如下:

Usage: cpufreq-set [options]
Options:
  -c CPU, --cpu CPU        number of CPU where cpufreq settings shall be modified
  -d FREQ, --min FREQ      new minimum CPU frequency the governor may select
  -u FREQ, --max FREQ      new maximum CPU frequency the governor may select
  -g GOV, --governor GOV   new cpufreq governor
  -f FREQ, --freq FREQ     specific frequency to be set. Requires userspace
                           governor to be available and loaded
  -h, --help           Prints out this screen

cpufreq-selector的用法如下:

Usage: cpufreq-set [options]
Options:
  -c CPU, --cpu CPU        number of CPU where cpufreq settings shall be modified
  -d FREQ, --min FREQ      new minimum CPU frequency the governor may select
  -u FREQ, --max FREQ      new maximum CPU frequency the governor may select
  -g GOV, --governor GOV   new cpufreq governor
  -f FREQ, --freq FREQ     specific frequency to be set. Requires userspace
                           governor to be available and loaded
  -h, --help           Prints out this screen
分类: 技术相关 标签: , , ,

无觅相关文章插件,快速提升流量