b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

知识:Linux驱动程序学习之一

电脑杂谈  发布时间:2021-01-04 06:01:36  来源:网络整理

我最近阅读了“ LINUX设备驱动程序”,其中提到需要准备内核源代码树。我已经在计算机上的/ usr / src中检查了几个版本的linux。这些实际上是已编译的内核源代码,即内核源树。

一、下载内核

为了使自己熟悉内核代码的安装和编译过程,我重新下载了linux-5.4.0 .tar.xz;。 / pub / linux / kernel / v 5.x / linux- 5.4.tar.xz此版本可以安装和编译。

二、配置linux内核

有许多种配置内核的方法,主要如下:

1.#make menuconfig //基于ncurse库的图形工具界面

2.#make config //基于文本的命令行工具,不推荐

3.#make xconfig //基于X11图形工具界面

4.#make gconfig //基于gtk +的图形工具界面

在此处选择简单输入,在终端中输入以下命令:

                    make menuconfig

讨论配置:

对于每个配置选项,用户都有三个选择,其各自的含义如下:

或[*]将函数编译到内核中

[]-请勿将此函数编译到内核中

[M]-将此函数编译为可以在需要时动态插入内核的代码

此步骤是配置过程。配置您所需要的。配置完成后,保存并退出。

三、编译并安装

cd /usr/src/linux-5.4;
make  -j4;   //编译内核
make modules_install //安装模块
make headers_install   //安装内核头文件
make –j4 install    //安装内核

四、问题

1、编译时发生错误,TAB键和空格键混入了Makefile中。图片中的灰色区域应该是TAB键的结果,而不是空格。这主要是由于直接复制的问题。自己手动编写代码,请记住使用TAB键。

linux驱动程序的功能

2、执行insmod时,它提示insmod:错误:无法插入模块hello.ko:文件存在。当出现此提示时,只需执行一次rmmod hello。

五、hello world模块

根据该书开始测试hello world模块。控制台无法打印信息。根据该信息,Linux内核在使用printk时会根据日志级别(即字符设备)将消息打印到当前控制台。从终端输出这些消息的前提是日志输出级别小于console_loglevel。

Internet上提供的解决方案(原始链接:/ wx601056818 / article / details / 80113983)

1)命令

    cat /proc/sys/kernel/printk
         4    4    1    7

第一个“ 4”代表内核打印功能printk的打印级别。只能在控制台上打印更高级别的信息(级别越小级别越高),即0-3级别信息:

linux驱动程序的功能_8.1程序和功能命令_win10程序和功能快捷键

#define KERN_EMERG      "<0>"   /* system is unusable                   */
#define KERN_ALERT      "<1>"   /* action must be taken immediately     */
#define KERN_CRIT       "<2>"   /* critical conditions                  */
#define KERN_ERR        "<3>"   /* error conditions                     */
#define KERN_WARNING    "<4>"   /* warning conditions                   */
#define KERN_NOTICE     "<5>"   /* normal but significant condition     */
#define KERN_INFO       "<6>"   /* informational                        */
#define KERN_DEBUG      "<7>"   /* debug-level messages                 */

程序中的“ KERN_EMERG”设置为0级,高于4级。换句话说,这不是级别问题。

2)输入以下命令

   echo 8 > /proc/sys/kernel/printk       //设置当前的日志级别为7 ,最低级别

根据此说明,它已更改为8 4 1 7.结果仍然无法打印。

3)打印量不足的信息将被写入日志,并可以通过dmesg命令查看。

dmesg

因此,我使用dmesg来检查日志,并发现以下提示:

linux驱动程序的功能_8.1程序和功能命令_win10程序和功能快捷键

图2 dmesg获得的日志输出

根据提示查找问题,发现Linux内核从3.7内核版本开始具有内核签名机制。找到我的/usr/src/linux-5.4/.config关于签名部分的设置,如下所示:

CONFIG_MODULE_SIG=y      // y 表示开启了签名机制。
# CONFIG_MODULE_SIG_FORCE is not set   // 模块必须有正确的签名才能正常使用,此处没设置
CONFIG_MODULE_SIG_ALL=y   // y表示 内核在编译的时候,会主动去给模块签名

换句话说,我的模块未签名,因为签名机制已打开。

解决方案:

1)添加证书

 /usr/src/linux-5.4/scripts/sign-file sha512 /usr/src/linux-5.4/certs/signing_key.pem /usr/src/linux-5.4/certs/signing_key.x509 hello.ko;

根据信息并按照上述说明添加证书,结果仍无法打印出来。

2)修改.config的配置。由于usr文件夹受写保护,因此可以在make menuconfig界面中轻松进行修改。具体来说,请在“启用可加载模块支持”中进行修改。

linux驱动程序的功能

图1内核配置选项

这三个项目是CONFIG_MODULE_SIG,CONFIG_MODULE_SIG_FORCE

有关CONFIG_MODULE_SIG_ALL = y和接口配置参数之间的对应关系,请参见valian1982 :(打开)Linux内核配置中签名的配置选项。

我将与CONFIG_MODULE_SIG对应的模块签名验证设置为n。

重新编译并安装内核。

重新编译hello world模块并执行以下命令:

insmod  ./hello.ko

结果仍然无法打印,但是执行dmesg的问候提示消失了。

摘要:到目前为止,我的hello模块无法将内容打印到控制台。稍后找到特定问题后,我将添加它。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-345407-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...