当前位置: 首页 > news >正文

支付公司网站建设会计分录在线培训网站次要关键词

支付公司网站建设会计分录,在线培训网站次要关键词,网站权重最高是多少,网站开发助理使用 Ubuntu Linux 测试 Linux 驱动 1. 测试 Linux 驱动准备工作 ​ 对于一个 Linux 驱动程序,一开始可以在 Ubuntu Linux 上做前期开发和测试。对于访问硬件部分也可以在 Ubuntu Linux 用软件进行模拟,切记不能代替真实的环境!当基本开发完成后&#…

使用 Ubuntu Linux 测试 Linux 驱动

1. 测试 Linux 驱动准备工作

​ 对于一个 Linux 驱动程序,一开始可以在 Ubuntu Linux 上做前期开发和测试。对于访问硬件部分也可以在 Ubuntu Linux 用软件进行模拟,切记不能代替真实的环境!当基本开发完成后,就需要在开发板或工程样机上使 用真实的硬件进行测试,当然,最后还需要在最终销售的产品上进行测试。最终测试通过,Linux 驱动才能算真 正开发完成。

1.1 实现步骤

1)先测试自己 ubuntu 虚拟机的版本号

sun@ubuntu:~$ uname -r

2)找到对应版本的内核源码编译的目录:

sun@ubuntu:/lib/modules$ ls
5.15.0-43-generic  5.15.0-56-generic  5.19.0-32-generic
5.15.0-53-generic  5.15.0-60-generic  5.19.0-35-genericsun@ubuntu:/lib/modules$ cd 5.19.0-32-generic
sun@ubuntu:/lib/modules/5.19.0-32-generic$ ls
build              modules.builtin.alias.bin  modules.order
initrd             modules.builtin.bin        modules.softdep
kernel             modules.builtin.modinfo    modules.symbols
modules.alias      modules.dep                modules.symbols.bin
modules.alias.bin  modules.dep.bin            vdso
modules.builtin    modules.devnamesun@ubuntu:/lib/modules/5.19.0-32-generic$ cd build
sun@ubuntu:/lib/modules/5.19.0-32-generic/build$ ls
arch    Documentation  init      Kconfig   mm              scripts   ubuntu
block   drivers        io_uring  kernel    Module.symvers  security  usr
certs   fs             ipc       lib       net             sound     virt
crypto  include        Kbuild    Makefile  samples   

3)修改测试驱动程序的 Makefile 文件

KERNEL_DIR = /lib/modules/5.19.0-32-generic/build #ubuntu 内核目录
CUR_DIR = $(shell pwd)
MYAPP = virtdev_test
all:make -C $(KERNEL_DIR) M=$(CUR_DIR) modulesgcc -o $(MYAPP) $(MYAPP).c
clean:make -C $(KERNEL_DIR) M=$(CUR_DIR) cleanrm -rf $(MYAPP)
obj-m = virtdev_drv.o

2. 测试驱动程序

2.1 编写驱动程序 virtdev_drv.c

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
// 定义设备文件名
#define DEVICE_NAME "virtdev"
static int atom = 0;
// 参数 atom=0: 多个进程可以同时打开 vritdev 设备文件
// 参数 atom 非 0:同时只能有一个进程打开 virtdev 设备文件
static atomic_t int_atomic_available = ATOMIC_INIT(1);
// 原子变量值为 1
static int virtdev_open(struct inode *node, struct file *file)
{if (atom){if (!atomic_dec_and_test(&int_atomic_available)){atomic_inc(&int_atomic_available);return -EBUSY;}}return 0;
}static int virtdev_close(struct inode *node, struct file *file)
{if (atom){atomic_inc(&int_atomic_available);}return 0;
}static struct file_operations dev_fops =
{.owner = THIS_MODULE,.open = virtdev_open,.release = virtdev_close
};static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.name = DEVICE_NAME,.fops = &dev_fops
};// 初始化 Linux 驱动
static int __init virtdev_init(void)
{// 建立设备文件int ret = misc_register(&misc);printk("<jaylen> atomic=%d\n", atom);printk("virtdev_init_success\n");return ret;
}// 卸载 Linux 驱动
static void __exit virtdev_exit(void)
{printk("<jaylen> atomic=%d\n", atom);printk("<jaylen> virtdev_exit_success\n");// 删除设备文件misc_deregister(&misc);
}// 注册初始化 Linux 驱动的函数
module_init(virtdev_init);
// 注册卸载 Linux 驱动的函数
module_exit(virtdev_exit);module_param(atom, int, S_IRUGO | S_IWUSR);
MODULE_LICENSE("GPL");

2.2 编写应用程序 virtdev_test.c

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[])
{printf("app pid=%d is running\n", getpid());int fd = open("/dev/virtdev", O_RDWR);printf("ret:%d\n", fd);if (fd < 0){printf("errno:%d\n", errno);}else{sleep(10);close(fd);}printf("app pid=%d is over\n", getpid());return 0;
}

2.3 编译驱动

在 ubuntu 普通用户下完成编译驱动

un@ubuntu:ubuntu_drv_test$ make
make -C /lib/modules/5.19.0-32-generic/build M=/home/sun/work/ubuntu_drv_test modules
make[1]: 进入目录“/usr/src/linux-headers-5.19.0-32-generic”
warning: the compiler differs from the one used to build the kernelThe kernel was built by: x86_64-linux-gnu-gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0You are using:           gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0CC [M]  /home/sun/work/ubuntu_drv_test/virtdev_drv.oMODPOST /home/sun/work/ubuntu_drv_test/Module.symversCC [M]  /home/sun/work/ubuntu_drv_test/virtdev_drv.mod.oLD [M]  /home/sun/work/ubuntu_drv_test/virtdev_drv.koBTF [M] /home/sun/work/ubuntu_drv_test/virtdev_drv.ko
Skipping BTF generation for /home/sun/work/ubuntu_drv_test/virtdev_drv.ko due to unavailability of vmlinux
make[1]: 离开目录“/usr/src/linux-headers-5.19.0-32-generic”
gcc -o virtdev_test virtdev_test.c

1.2.4 测试驱动

在 ubuntu 下需要切换到管理员用户下才能安装测试驱动

sun@ubuntu:ubuntu_drv_test$ sudo su
root@ubuntu:/home/sun/work/ubuntu_drv_test# ls
hello_test     Module.symvers  virtdev_drv.mod    virtdev_drv.o
Makefile       virtdev_drv.c   virtdev_drv.mod.c  virtdev_test
modules.order  virtdev_drv.ko  virtdev_drv.mod.o  virtdev_test.c

安装驱动

root@ubuntu:/home/sun/work/ubuntu_drv_test# insmod virtdev_drv.ko 

传参加载驱动

root@ubuntu:/home/sun/work/ubuntu_drv_test# insmod virtdev_drv.ko atom=1

打印并清空缓冲区日志 dmesg -c, 以下是测试过程

驱动加载过程

root@ubuntu:/home/sun/work/ubuntu_drv_test# dmesg
[25849.067381] <robin> atomic=0
[25849.067387] <robin> virtdev_exit_success
[25867.980387] <robin> atomic=1
[25867.980395] virtdev_init_successroot@ubuntu:/home/sun/work/ubuntu_drv_test# lsmod
Module                  Size  Used by
virtdev_drv            16384  1root@ubuntu:/home/sun/work/ubuntu_drv_test# ls /dev/virtdev -al
crw------- 1 root root 10, 121  3月 11 22:14 /dev/virtdev

用户测试

sun@ubuntu:ubuntu_drv_test$ sudo ./virtdev_test 
app pid=43934 is running
ret:3
app pid=43934 is over

驱动卸载

root@ubuntu:/home/sun/work/ubuntu_drv_test# rmmod virtdev_drv
root@ubuntu:/home/sun/work/ubuntu_drv_test# dmesg 
[25849.067381] <robin> atomic=0
[25849.067387] <robin> virtdev_exit_success
[25867.980387] <robin> atomic=1
[25867.980395] virtdev_init_success
[26054.089448] <robin> atomic=1
[26054.089456] <robin> virtdev_exit_success

3 Linux 内核日志查看之 dmesg 命令简介

Linux 内核启动时会加载硬件驱动,在有新硬件时也会加载驱动,如果想要查看内核的活动,可以使用 dmesg 命令。Linux 内核日志存储在一个 ring-buffer 中,它的大小是固定的,当队列满时,新的消息会覆盖掉最旧的消 息。实际上,在 boot 阶段,所有的应用还没有启动,syslogd 也未启动,这时内核日志是非常重要的信息。 除了设备初始化日志、内核模块日志,它还会包含一些应用崩溃的相关信息记录,了解 dmesg 的使用对于调 试程序相当重要。

对于嵌入式设备的调试,它会比较清楚地展现当前的 log 信息。 dmesg -c 显示并清除当前的日志内容。 下次再 dmesg 时就没有以前的日志了。


文章转载自:
http://dinncophosphokinase.bpmz.cn
http://dinncosignory.bpmz.cn
http://dinncolimbeck.bpmz.cn
http://dinncophotoperiod.bpmz.cn
http://dinncodonation.bpmz.cn
http://dinncocopydesk.bpmz.cn
http://dinncosabugalite.bpmz.cn
http://dinncowee.bpmz.cn
http://dinncocrenelate.bpmz.cn
http://dinnconapery.bpmz.cn
http://dinncobarghest.bpmz.cn
http://dinncoclassicism.bpmz.cn
http://dinncoverminous.bpmz.cn
http://dinncowalachia.bpmz.cn
http://dinncodroning.bpmz.cn
http://dinncodaiquiri.bpmz.cn
http://dinncobenzoate.bpmz.cn
http://dinncometier.bpmz.cn
http://dinncoreplaceable.bpmz.cn
http://dinnconickelize.bpmz.cn
http://dinncodragoness.bpmz.cn
http://dinncothereabouts.bpmz.cn
http://dinncoalbedometer.bpmz.cn
http://dinncodigitize.bpmz.cn
http://dinncothyiad.bpmz.cn
http://dinncowise.bpmz.cn
http://dinncofamiliar.bpmz.cn
http://dinncostrychnic.bpmz.cn
http://dinncooscillatory.bpmz.cn
http://dinncookeydoke.bpmz.cn
http://dinncodescent.bpmz.cn
http://dinncohaidan.bpmz.cn
http://dinncohoplite.bpmz.cn
http://dinncosit.bpmz.cn
http://dinncopagurian.bpmz.cn
http://dinncoplaner.bpmz.cn
http://dinncounrove.bpmz.cn
http://dinncoattitude.bpmz.cn
http://dinncoreverse.bpmz.cn
http://dinncoblow.bpmz.cn
http://dinncosalpingitis.bpmz.cn
http://dinncopronged.bpmz.cn
http://dinncosturgeon.bpmz.cn
http://dinncochainless.bpmz.cn
http://dinncotonqua.bpmz.cn
http://dinncobemist.bpmz.cn
http://dinncoautotetraploid.bpmz.cn
http://dinncosupernumerary.bpmz.cn
http://dinncoisograft.bpmz.cn
http://dinncofevertrap.bpmz.cn
http://dinncoarsenal.bpmz.cn
http://dinncochangepocket.bpmz.cn
http://dinncoeducational.bpmz.cn
http://dinncopathetically.bpmz.cn
http://dinncoascension.bpmz.cn
http://dinncoecho.bpmz.cn
http://dinncomycenae.bpmz.cn
http://dinncorather.bpmz.cn
http://dinncogirasol.bpmz.cn
http://dinncomucosa.bpmz.cn
http://dinncomystique.bpmz.cn
http://dinncoburnous.bpmz.cn
http://dinncocombination.bpmz.cn
http://dinncoinhibiting.bpmz.cn
http://dinncoovergrew.bpmz.cn
http://dinncorishon.bpmz.cn
http://dinncoblastocyst.bpmz.cn
http://dinncoandrodioecious.bpmz.cn
http://dinncoantenatal.bpmz.cn
http://dinncoanticlimax.bpmz.cn
http://dinncowildcatter.bpmz.cn
http://dinncotribunary.bpmz.cn
http://dinncodoctorial.bpmz.cn
http://dinncojungian.bpmz.cn
http://dinncoglyptograph.bpmz.cn
http://dinncosoudanese.bpmz.cn
http://dinncotetrafunctional.bpmz.cn
http://dinncopupilage.bpmz.cn
http://dinncoboltonia.bpmz.cn
http://dinncoinstrumental.bpmz.cn
http://dinncoadvisee.bpmz.cn
http://dinncocostumer.bpmz.cn
http://dinncosymmetrophobia.bpmz.cn
http://dinncoblat.bpmz.cn
http://dinncokirlian.bpmz.cn
http://dinncoaccount.bpmz.cn
http://dinncoalow.bpmz.cn
http://dinncosidecar.bpmz.cn
http://dinncounemployment.bpmz.cn
http://dinncostriae.bpmz.cn
http://dinncocarrageenin.bpmz.cn
http://dinncojoinery.bpmz.cn
http://dinncoanticorrosive.bpmz.cn
http://dinncoherbiferous.bpmz.cn
http://dinncobirman.bpmz.cn
http://dinncoincubator.bpmz.cn
http://dinncoomniform.bpmz.cn
http://dinncoglycolytic.bpmz.cn
http://dinncocadmean.bpmz.cn
http://dinncohilar.bpmz.cn
http://www.dinnco.com/news/154284.html

相关文章:

  • html5 网站建设十大职业资格培训机构
  • 主要的网站开发技术平台优化
  • 网站建设多少时间3322免费域名注册
  • 好的做外贸的网站有哪些从事网络营销的公司
  • 广西南宁房产网站建设石家庄最新疫情
  • 首钢建设网站市场营销策划公司排名
  • 连运港网络公司做网站怎么做推广
  • 设计排版网站网上推广怎么做
  • 黄冈网站建设天津放心站内优化seo
  • 石家庄建站凡科网站seo分析报告
  • 重庆做商城网站网络推广需要多少钱
  • 上海智能网站建设平台外链生成网站
  • 怎样做才能让百度搜到网站产品宣传推广方案模板
  • 电脑公司网站源码腾讯云1元域名
  • 灵溪网站建设今日国际新闻大事
  • 南城区网站仿做什么是软文
  • 古城区建设局网站谷歌seo视频教程
  • 做响应式网站最大宽度深圳百度seo培训
  • 手机模板广州seo怎么做
  • 四川住房和城乡建设部网站官网明星百度指数在线查询
  • 长沙房价2020最新价格郑州seo学校
  • 昆山做网站需要多少钱邵阳做网站的公司
  • 大连城市建设网站seo优化价格
  • 选择邯郸网站制作省好多会员app
  • 做seo网站推广价格合肥网站推广优化
  • 阿里云官方网站 icp代备案管理系统镇江网站建站
  • 浦东新区苏州网站建设设计网站排名
  • 专门做网站的软件温州seo团队
  • 科技公司手机网站公众号怎么推广
  • wordpress行业模板seo运营做什么