自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (1)
  • 收藏
  • 关注

原创 VS2019 创建WIndows桌面应用程序出现警告:“WinMain”的批注不一致: 此实例包含 无批注。

WinMain函数的参数加上_In_即可,注意第二个加的是_In_opt_#include <windows.h>int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPreInstance, _In_ LPSTR CmdLine, _In_ int nCmdShow){ return 0;}

2021-09-03 16:32:16 4125

原创 编写简单的WDF驱动程序

编写简单的WDF驱动程序在创建新的KMDF或UMDF程序时,必须选择一个不多于32个字符的驱动程序名称。此长度限制在wdfglobals.h中定义。如果驱动程序的名称超出最大尺度,则驱动程序无法加载。每个基于框架的驱动程序都包含一个DriverEntry例程和一组事件回调函数,框架在发生特定于对象的事件时将调用该函数。基于框架的简单驱动程序可能由以下内容组成:DriverEntry例程,在加载驱动程序并调用WdfDriverCreate时调用。一个EvtDriverDeviceAdd事

2021-02-24 12:05:28 539

原创 使用WDF开发驱动程序

使用WDF开发驱动程序Windows驱动程序框架(WDF)驱动程序由基于框架的驱动程序所使用的Windows驱动程序框架对象定义的DriverEntry 例程和一组事件回调函数组成。创建WDF驱动程序时,执行操作:使用框架驱动程序对象来表示驱动程序驱动程序的DriverEntry 例程必须调用WdfDriverCreate以创建表示驱动程序的框架驱动程序对象。WdfDriverCreate方法还会注册驱动程序的EvtDriverDeviceadd回调函数即插即用,该函数(PnP)管理...

2021-02-07 10:50:46 803

原创 windbg 双机调试

调试机与被调试机连上usb-usb的数据线,台式机需要连接非RJ45口的usb3.0口在被调试机上运行RW.exe,查看bus device function 的ID如图,该设备的bus device function 的ID为3.0.3编写批处理脚本 windbg.batbcdedit /debug onbcdedit /set testsigning onbcdedit /dbgsettings usb targetname:testbcdedit /set LOADOPTIONS B

2021-02-02 15:51:28 465 3

原创 Wake On Wlan SOP

1、打开软件MAGPAC.exe2、选择magic packets3、选择 power on one host4、输入被唤醒机器的ip address 和mac address5、被唤醒机器驱动程序需要设置允许被此设备唤醒6、被唤醒机器的BIOS界面wake on wlan需要被设置为enable7、关闭被测试机器的防火墙,确保host 和被测机器可以相互ping通。...

2021-02-02 11:47:33 1400

原创 VS2019新建项目,无法创建KMDF项目

进入WDK安装目录D:\Windows Kits\10\Vsix\VS2019,找到WDK.vsix,安装即可

2021-01-21 12:07:58 748

原创 通过B站搜索页将搜索到的内容批量下载,并且显示下载进度

此次练习的目的将B站的视频批量下载下来,格式为flv格式.m4s格式的URL拼接有困难,只能一个一个进行下载,保存下来的格式为mp4.m4s格式的连接是一个为视频连接,一个为音频连接,需要下载后进行合并.m4s格式的连接进行访问的时候,将requests headers中的range参数范围设置一下,即可下载完整视频通过网页的解析,找到avid和cid两个参数,通过api解析json数据得出包含flv的视频连接程序源码import requestsimport

2020-09-24 17:11:42 511 1

原创 Ubuntu安装pycharm,快捷创建desktop图标

Ubuntu安装pycharm去pycharm官网下载安装包 for linux下载linux community版本得到一个压缩包,解压进入文件夹进入bin目录文件夹下输入sh ./pycharm.sh然后进行安装下一次进入pycharm,还是一样的方法进入bin目录下,输入sh ./pycharm.sh 快捷创建desktop 图标下一步是创建desktop图标进行如上操作即可创建desktop图标如上即可添加到收藏夹按win搜索也可以找到...

2020-09-03 10:58:11 476

原创 P站-画师通图片如何保存为原图

进入P站-画师通P站-画师通打开F12,选中一个图片找到html找到hrefhttps://www.huashi6.com/ + href就是下一级页面进入子页面,打开F12,选中图片其中data-original连接是图片地址https://img2.huashi6.com/images/resource/2018/02/08/67162h181p0.png?imageView2/3/q/100/interlace/1/w/2560/h/2560/format/webp进入图片

2020-09-02 16:57:48 7875 1

原创 设备树——pinctrl和gpio子系统

一、设备树中添加pinctrl节点模板1.1 创建对应的节点打开.dts文件,在iomuxs节点中的板子型号对应的节点中添加pinctrl_test节点。注意前缀必须为pinctrl_pinctrl_test: testgrp{ /*具体的pin信息*/};1.2添加fsl,pins属性设备树是通过属性来保存信息的,对于I.MX系列SoC而言,pinctrl驱动程序是通过读取fsl,pins属性值来获取PIN的配置信息。pinctrl_test: testgrp{ fsl,pi

2020-08-28 16:01:38 3094

原创 设备树常用的OF操作函数

设备树常用的OF操作函数1、查找节点的OF函数设备都是以节点的形式挂到设备树上的,因此想要获取这个设备的其他属性信息,必须先获取到这个设备的节点。linux内核使用device_node结构体来描述一个节点,该结构体定义在include/linux/of.h中。定义如下:struct device_node { const char *name; /* 节点名字 */ const char *type; /* 设备类型 */ phandle phandle; const char *f

2020-08-27 14:39:24 1146

原创 中断处理之中断上下文、中断上下部和共享中断

中断处理之中断上下文、中断上下部和共享中断1、中断上下部设备的中断会打断内核中进程的正常调度和运行。如上图描述了linux内核中断的处理机制。在中断执行时间尽可能短和中断处理大量工作中找到一个平衡点,linux将中断处理函数分为上部(top half)和下部(botoom half)。上部完成尽可能少的紧急的中断,往往只是简单的寄存器读写操作并触发中断,将需要中断处理的程序放到下部的队列中,等待中断处理。这样一来工作的中心就处于下部,下部来完成中断的绝大多数任务。下部中断处理程序可以被新的中

2020-08-25 13:13:29 1384

原创 Linux内存管理之kmalloc、malloc、vmalloc的区别

Linux内存管理之kmalloc、malloc、vmalloc的区别kmalloc和vmalloc分配的是内核空间的内存,malloc分配的是用户空间的内存。kmalloc保证分配的内存在物理上是连续的,内存只有在被DMA(直接存储器访问)访问的时候才需要在物理上连续。vmalloc分配的内存在虚拟地址空间上是连续的。malloc分配的是很多内存片断,不是连续的地址空间。kmalloc分配的内存比较小,malloc和vmalloc分配的内存较大。vmalloc要比kmalloc速度慢。尽管只

2020-08-25 11:09:47 1428

原创 ARM 设备树

ARM 设备树的起源设备树是一种描述硬件的数据结构,它起源于OpenFirmware。在linux2.6中,ARM架构的板级硬件细节过多的被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用设备树后,很多硬件信息可以直接通过设备树传递给linux,而不需要在内核中进行大量的冗余编码。设备树由一系列被命名的节点(Node)和属性(Property)组成,而节点本身可以包含子节点。所谓属性,其实就是成对出现的名称和值。在设备树中,可描述的信息包括:CPU的数量和类别

2020-08-18 16:40:16 763

原创 linux总线设备驱动模型——设备总线device&bus

设备描述linux系统中每个设备由一个struct device描述struct device { ... struct kobject kobj; char bus_id[BUS_ID_SIZE]; //在总线上唯一标识设备的字符串 struct bus_type *bus; //设备所在总线 struct device_driver *driver; //管理该设备的驱动 void *driver_data; //该设备驱动使用的私有数据成员

2020-08-18 09:01:45 177

原创 linux总线设备驱动模型——platform总线设备模型

Platform总线Platform总线是linux2.6内核加入的一种虚拟总线。Platform机制由两部分组成:platform_device 和 platform_driver。Platform设备驱动优势platform机制将设备本身的资源注册进内核,由内和统一管理。在驱动程序使用这些资源时使用统一的接口,提高了程序的可移植性。platform_device结构体struct platform_device{ const char *name; //设备名 int id

2020-08-13 13:27:04 519

原创 linux总线设备驱动模型——总线bus_basic

设备元素模型总线驱动设备总线总线是处理器和设备之间的通道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟总线platform。在设备模型中,总线由bus_type结构表示,定义在<linux/device.h>中。struct bus_type { const char *name; //总线名字 struct bus_attribute *bus_attrs; //总线属性 struct device_attribute *dev_attrs

2020-08-12 14:08:42 254

原创 linux总线设备驱动模型——Kset

Kset/******************************************************************* *Kset是具有相同类型的kobject集合,在sysfs中体现为一个目录, *在内核中用kset数据结构表示。 *******************************************************************/struct kset{ struct list_head list;//连接该kset中所有kobje

2020-08-12 10:42:45 189

原创 linux总线设备驱动模型——Kobject

Sysfs文件系统基于RAM将内核的数据结构、数据结构的属性和它们之间的关系展现给用户空间。sysfs把连接在系统上的设备和总线组织成分级的文件,使其可以从用户空间直接访问。Sysfs文件系统挂载于/sys/目录下,它的子目录包括Block,Bus,devices和drivers等。Kobject的作用:创建sys目录下的文件夹实现了基本的面向对象管理机制与Sysfs文件系统紧密相连,在内核中注册的每一个Kobject对象对应/sys/下的一个子目录Kobject结构体内容不需要一

2020-08-11 13:38:34 211

原创 字符设备驱动程序(ioctl)——开发步骤(6)

字符设备驱动程序(ioctl)ioctl函数模型int (*ioctl)(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg){}返回值:ioctl函数的实现通常是根据命令执行的switch语句,但是命令号不能匹配到任何一个设备时,通常返回-EINVAL(非法参数)使用参数:参数如果是一个整数,可以直接使用,如果是一个指针,需要先确保用户地址的有效性,使用前需要做正确检查需要检测的函数:

2020-08-07 17:28:27 1227 2

原创 字符设备驱动程序(write & read)——开发步骤(5)

运用应用程序调用自己编写的字符设备驱动将字符设备驱动程序make,编译一下导入模块并查看模块sudo insmod memdev.kosudo lsmod创建设备文件memdev0并查看,在/dev目录下cd /devsudo mknod 设备文件名 c(字符设备驱动程序) 主设备号 次设备号查看主设备号cat /proc/devices创建设备文件sudo mknod memdev0 c 241 0编译mem_app.c文件,生成可执行文件a

2020-08-06 15:38:53 780 1

原创 字符设备驱动程序(Demo)——开发步骤(4)

将字符驱动程序进行编译,导入模块1、编写Makefile文件/*************************************************** *外部编译:将内核模块源文件放在内核源码外部进行编译 *动态编译:编译生成动态模块 xxx.ko ***************************************************/进入终端查看当前系统的内核版本号uname -r进入系统modules目录查看cd /lib/modules/4.

2020-08-05 14:51:07 573 1

原创 字符设备驱动程序(Demo源码)——开发步骤(3)

基于模块开发模板#include <linux/init.h>#include <linux/module.h>static int __init demo_init(void){ printk(KERN_INFO "---%s---%s---%d---\n",__FILE__,__func__,__LINE__); return 0;}static void __exit demo_exit(void){ printk(KERN_INFO "---%s---

2020-08-05 12:22:19 426 1

原创 字符设备驱动程序——开发步骤(2)

字符设备驱动程序——开发步骤(2)cdev结构体struct cdev{ struct module *owner; //THIS_MODULE const struct file_operations *ops; //操作方法集 dev_t dev; //设备号 unsigned int count; //设备个数 struct list_head list;}dev_t 设备号用来唯一标识设备的。数据类型:32位无符号整型主设备号(前12位) + 次设

2020-08-05 10:42:02 210

原创 外部输入两个字符串,用C语言编写实现my_strlen,my_strcpy,my_strncpy,my_strchr,my_strstr函数的功能

#include <stdio.h>#include <string.h>// 功能:计算字符串s的长度、返回s的长度,不包括结束符NULL。void my_strlen(char *str){ int lenth = 0; while (*str++) { lenth++; } printf("lenth:\t%d\n",lenth); }/*比较字符串s1和s2;(1)当s1&l

2020-08-04 15:10:06 366

原创 字符设备驱动程序——开发步骤(1)

驱动程序?使硬件工作的软件

2020-08-04 15:04:33 523

原创 Uboot

uboot 介绍一个嵌入式系统从软件角度分析,可以分为三个层次:1、引导加载程序固化在固件中的bootBootloader2、linux 内核linux kernel3、文件系统系统命令应用程序Bootloader定义Bootloader是在操作系统运行之前运行的一段小程序,通过这段小程序可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终的调用操作系统做准备。为什么需要进行bootloader移植?每一种不同的cpu体系结构有不同的bootload

2020-08-03 16:54:48 182

原创 Ubuntu 18.04 linux内核(版本4.18.14)编译

linux内核编译===================================================================一、环境说明ubuntu 版本: 18.04linux 内核版本: 4.18.14需要确保内存的空间充足,以免编译到最后内存空间不足导致编译失败二、编译步骤1、 下载linux内核源码前往linux kernel源码官网 ,下载对应版本的内核源代码,这里我选择的是4.18.14版本,下载到ubuntu中。选择HTTP下载链接进入

2020-07-31 16:35:36 2679

原创 OpenCV基于python的图像融合

结果展示:

2019-12-03 17:25:53 486

原创 python使用OpenCV,进行图像处理,五种灰度处理方式

b,g,r = cv2.split(img_dog) # 对用cv2读取的数据进行切片,BGRplt_img_dog = cv2.merge([r,g,b]) # 将BGR格式转换为RGB格式,用于plt的图片预览Img_cat = cv2.imread('cat.jpg')b,g,r = cv2.split(Img_cat) # 对用cv2读取的数据进行切片,BGRpl...

2019-12-03 17:23:22 2128

原创 C++中的覆盖和隐藏

覆盖:子类覆盖父类函数覆盖的特征是:分别位于子类和父类中函数名字和参数都相同父类的函数是虚函数 virtual隐藏:子类隐藏了父类函数隐藏的特征是:子类的函数与父类的函数名字相同,但是参数不同,父类函数被隐藏子类的函数与父类的函数名字相同,参数也相同,但是父类没有 virtual,父类被隐藏总结IF (子类函数与父类的函数名字相同,但是参数不同)  父类函数被隐藏;...

2019-08-30 13:31:59 568

原创 链表的一些基本操作,头插尾插,创建,删除,逆序,排序等等

#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct node{ int data; struct node *pNext;}Node;Node *create_list(){ Node *phead = (Node *)malloc...

2019-08-11 18:46:38 179

原创 STM32_2

GPIO端口模式寄存器GPIOx_BSRR寄存器:实现对 GPIO_ODR寄存器进行原子读取/修改访问。上下拉电阻作用:1、固定未使用的引脚的电平2、增强驱动,不会出现供电不足的状态GPIO_BSRR:置位/复位寄存器BS:bit setODR写1置位BR:bit resetODR写1复位LED初始化set PC output上拉下拉 频率BSR...

2019-08-11 18:44:37 187

原创 STM32_0810

STM321、st :意法半导体,即SOC厂商2、M :微控制器,注意不是微处理器3、32bit : 每次处理数据的长度是32位,32位的微控制器4、CPU的位数是指每次处理的操作数的位数5、char-- 8bit6、short-- 16bit7、int-- 32bit8、sizeof(char*) = 4 //指针都为4通信总线:1、I2C :最基础的板内连接总线,2根...

2019-08-10 21:22:17 159

原创 QT中TCP传递结构体,

看了网上很多大神,有认识重载运算符把结构体中的内容一个一个进行传递的,比较麻烦,也有说的比较轻松的,完全不适合我这种小白看,完全不知所以。最后终于找到了解决的方法。下面是我学习到的的方法:在客户端头文件中定义一个结构体:typedef struct node{ char count[20]; char passwd[20]; char cmd[5]; ...

2019-08-03 22:48:53 1964

原创 链表的一些基本操作,头插尾插,创建,删除,逆序,排序等等

#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct node{ int data; struct node *pNext;}Node;Node *create_list(){ Node *phead = (Node *)malloc...

2019-07-24 10:44:48 208

原创 开始复习链表,今天写了两个函数,一个创建节点,一个遍历节点

#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct node{ int data; struct node *pNext; }Node;Node *create_list(){ int i; int num; ...

2019-07-14 22:37:34 163

原创 C++面向对象笔记

::域解析符号1、命名空间2、类的函数的定义(体外定义) 返回值 类名::函数名(参数列表)"stdio.h" :当前环境进行寻找<stdio.h> :系统环境进行寻找<iostream.h> : 旧的头文件,非标准输入输出流,可以直接使用cin,cout<iostream> : 新的头文件,标准输入输出流,不可以直接...

2019-07-11 10:37:23 164

原创 字符串逆序的深入,例句"i am from shanghai"改为"shanghai from am i"

//这个程序首先是将整个字符串进行逆序,再根据空格进行分别逆序。#include <stdio.h>#include<string.h>int main(){ char str[100] = "i am from shanghai"; // 数组长度、字符串长度 是不一样的 // 求字符串长度 int len = 0;...

2019-07-11 09:10:24 240

原创 深拷贝(自己写拷贝构造函数),浅拷贝(默认的拷贝构造函数)

#include <iostream>#include <string>using namespace std;class student{private: char *m_name; int m_age;public: //构造函数(如果不写构造函数,系统会调用默认构造函数) stud...

2019-07-10 19:11:31 774 1

QT基于TCP的服务器和客户端.rar

QT基于TCP协议写的服务器和客户端,用的是栈容器页面跳转,非父子窗口跳转,只初步实现了将账户的注册和登录功能,注册查重是根据账户名字,如果名字重复了,就不能继续注册,注册和登录界面还加了一个小的功能可以进行背景图的更换,相当于换肤。

2019-08-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除