自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (3)
  • 收藏
  • 关注

原创 Ubuntu开机停在Grub命令行以及启动后进入emergency模式的解决方法

sudo blkid 查找efi分区的id,type=“vfat”,将 /etc/fstab 中原 uuid改成新的uuid即可。主机上两个硬盘,本来都是Ubutun系统,然后将其中一个重装为windows系统,结果另外一个硬盘的Ubutun启动不了。导致在原系统中的硬盘与分区的描述与目标硬盘的描述不一样,所以导入后的机器才无法找到硬盘而无法启动的。这种情况往往是 GRUB 的系统文件或者配置文件损坏了,但是硬盘引导扇区中的内容还在。最后在终端输入命令,更新grub,确保修改生效。

2024-01-19 00:09:14 1873

原创 如何让嵌入式开发板使用主机的网络

将开发板和主机用网线连接安装 net-tools,使用 ifconfig 命令或者使用 ip 命令su rootip a发现一个 eth0的网口ip link set xxx up 有多个网口时可以用该命令启用某一个网口写入以下内容这样就设置了开发板的ip地址为192.168.0.10,流量转发走的ip为主机的192.168.0.3输入命令生效该配置,可以用ifconfig和ip a查看是否生效成功打开/etc/bash.bashrc写入以下内容配置 apt 代理,写入下面内容。

2023-12-01 00:00:39 692 1

原创 OpenGL概要

渲染:把程序提供的几何数据转换成屏幕上的图像的过程叫做渲染,渲染的结果保存在帧缓存中像素:计算机上显示的图片都是由矩形的颜色点组成,这些颜色点叫做像素,每个像素都是由3个颜色元素组成的,一个红点、一个绿点和一个蓝点、RGB缓存:OpenGL ES部分运行在CPU上,部分运行在GPU上,协调两个内存区域之间的数据交换,而OpenGL ES为两个内存区域间的数据交换定义了缓存(buffers)的概念,缓存是指图形处理器能够控制和管理的连续RAM。什么是OpenGL。

2023-06-21 10:30:18 1196

原创 EGL、GBM学习

参考代码链接EGL Off-Screen rendering using GBM:https://blog.csdn.net/eydwyz/article/details/107046470kmscube:https://gitlab.freedesktop.org/mesa/kmscubehttps://github.com/eyelash/tutorials/blob/master/drm-gbm.c显示服务器实现(一):https://zhuanlan.zhihu.com/p/26852730

2023-05-23 16:59:17 5871 4

原创 EGL学习笔记

EGL (Embedded-System Graphics Library) 是一个图形库,主要用于在嵌入式系统中管理渲染表面(surface)和 GPU 之间的通信。EGL 定义了一组 API,用于连接 OpenGL ES、OpenVG或其他原生渲染 API 与底层图形设备驱动程序之间的通信。EGL™ 是 Khronos 渲染 API(例如 OpenGL ES 或 OpenVG)与底层原生平台窗口系统之间的接口。

2023-05-23 16:52:58 992

转载 谷歌翻译不能用的解决方案

https://hcfy.app/blog/2022/09/28/ggg

2023-05-16 09:53:44 161

原创 Linux内核学习11——编写块设备驱动程序(下)

上一节介绍了块设备子系统常用的数据结构和常用的接口api函数内核驱动里面使用ramdisk,即系统的内存来构造一个虚拟的设备,在这个块设备里面做一些读写的操作,和对request做一些简单的操作,ramdisk-driver.c#include <linux/fs.h>#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/init.h>#include &lt

2022-02-03 23:04:00 2546 4

原创 Linux内核学习11——编写块设备驱动程序(中)

在用户空间里面,比如说有一个数据buffer,这个数据buffer怎么通过write这个函数写入到eMMC的存储空间?比如在用户空间使用open函数来打开data目录下的test这个文件,调用write函数,将这个data的buffer写入到这个文件里面,我们的问题是,这个write函数它经历过linux内核里面什么样的内核模块以及经历些什么样的数据结构,它才能把这个data的数据写入到eMMC里面的Sector里面?首先,我们调用write这个函数,往这个句柄里面写数据的时候,那么在内核空间里面它首.

2022-02-03 23:00:13 395

原创 Linux内核学习11——编写块设备驱动程序(上)

块设备可以随机存储。字符设备,比如键盘,只能按照输入顺序存取,不可随机,打乱输入的字节流。磁盘的最小读写单元是一个扇区文件系统层,包括常见的文件系统,以及虚拟文件系统层VFS,字符设备可以直接用应用程序打开。块设备不会在应用程序直接打开,而是要通过文件系统访问块设备。通用块层:为了通用的块设备,建立了一个统一的模型,这一层的主要工作是接收文件系统层发出的磁盘请求,并最终向磁盘设备发出io请求,所以它隐藏了很多底层硬件块设备的细节,为块设备提供了一个抽象的模型。IO调度层:接收通用块层发出的IO请.

2022-02-03 22:58:33 667

原创 Linux内核学习10——编写字符设备驱动程序

一、在linux内核中,字符设备是由cdev结构体来描述的,它位于/include/linux/cdev.h中/* SPDX-License-Identifier: GPL-2.0 */#ifndef _LINUX_CDEV_H#define _LINUX_CDEV_H #include <linux/kobject.h>#include <linux/kdev_t.h>#include <linux/list.h>#include <linux/

2022-02-02 20:35:53 3514

原创 Linux内核学习9——内核多任务并发实例(下)

接上一节https://blog.csdn.net/weixin_45730790/article/details/122521234为了在内核中模拟多任务并发访问共享链表,我们需要完成下面几个任务。首先,需要在内核中建立一个共享链表,并使用自旋锁结构对其进行访问保护利用工作队列机制建立若干个内核线程,每个内核线程都应该对共享链表进行插入/删除操作创建一个内核定时器,并编写其回调函数,使其在到期时能够删除共享链表中的节点在模块卸载函数中实现链表的销毁这是我们模拟系统调用任务对共享链表的访问

2022-01-17 12:27:20 968

原创 Linux内核学习9——内核多任务并发实例(上)

这里我们来看看Linux中是如何使用同步机制来实现复杂的多任务同步的首先来介绍一下这个例子有一个内核共享资源(链表),同时有三种不同类型的内核任务会访问该链表,并对其进行插入或者删除节点的操作,内核线程负责向链表加入新节点,内核定时器负责定时/删除节点,而系统调用负责在某个时刻销毁整个链表。这三种内核任务并发执行时,有可能会破坏链表数据的完整性,所以我们必须对链表进同步访问保护,以确保数据的一致性。在这样一个多任务并发访问的模型中,我们需要选用合适的内核同步机制来管理这些任务,使得它们能够有条不紊的执

2022-01-16 11:53:32 580

原创 Linux内核学习8——添加系统调用

基于linux 5.0内核添加一个系统调用,但是单纯添加一个系统调用会显得有些单调,所以这里把系统调用,工作队列,修改内核,内核编译,内核模块的编写,插入等结合起来。要添加的是一个系统调用日志收集系统。系统调用是用户程序与系统打交道的入口,系统调用的安全直接关系到系统的安全,假设一个用户它恶意的不断的调用fork,将会导致系统负载增加,所以,如果能收集到是谁调用了一些有危险的系统调用,以及系统调用的时间和其它信息,将有助于系统管理员进行事后的追踪,从而提高系统的安全性,下面这张图就是本次要添加的系统调用

2022-01-12 21:07:52 1189

原创 web自动化总是定位不到元素的解决方案

一、定位不到主要原因是什么?1.定位的方法不够熟练。前提条件∶元素必须要有唯一的地方。几种∶八大定位元素的方法︰id,name,link_text , css,class,xpath,partail_link_text,tag_nameclass和tag_name一般不用xpath的定位方式:面试题:在xpath里面/和//的区别是什么?1.绝对路径:/ 从html网页的第一个标签开始,然后一个一个往下找,直到找到相应元素。如:/html/body/div[1]/div[1]/div[5

2021-12-23 11:03:42 1476

原创 Web自动化测试3——数据驱动+pytest

视频传送门:https://www.bilibili.com/video/BV1Ey4y1L7xU?p=8&spm_id_from=pageDriver一、DDT+EXCEL数据驱动excel/yaml (excel适合做web自动化测试,yaml适合做接口自动化)1.什么是DDTdata driver test数据驱动测试。可以完美和Unitttest结合实现数据驱动。2.DDT使用的方式(通过装饰器来使用)在函数或者类上面加上一个装饰器用来实现一些特定的功能。@ddt

2021-12-17 10:27:31 687

原创 Web自动化测试2——设计模式+生成测试报告+断言

一、设计模式Pom模式+关键字驱动模式pom模式:page object model 页面对象模式。好处:1.解决:线性脚本的问题2.解决:代码不能重复利用的问题3.解决:后期的维护问题。pom模式,简单来说就是分类分三层:1.基础层:base层 主要放selenium原生的方法。2.页面对象层:po层 主要用于放页面的元素和页面的动作。3.测试用例层:testcase 存放测试用例以及测试数据。页面对象层调用基础层的方法,测试用例层调用页面对象层的方法。unittest的前后置处

2021-12-15 10:20:21 2369

原创 Web自动化测试1——元素定位+unittest的基本使用+项目实例

python+selenium自动化测试一、环境搭建:pip install selenium -i清华源下载浏览器驱动:https: //npm.taobao.org/mirrors/chromedriver 注意版本要与浏览器版本一致把解压缩的浏览器驱动chromedriver放在python解释器所在的文件夹二、示例from selenium import webdriverfrom selenium.webdriver.common.by import By# 打开浏览器dri

2021-12-12 16:31:17 1335

原创 Linux内核学习7——中断下半部分的代码分析及应用

Linux将中断处理分为上下两部分,上半部分主要处理紧急的,必须马上处理的事情,下半部分处理不那么紧急的事情,linux内核也提供了相应的机制,这里使用理论课中的tasklet机制来进行实验。本节代码是在上节的基础上稍微增加一部分代码即可。一、程序示例完整代码如下:interrupt2.c#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#include <

2021-12-07 16:36:12 682

原创 Linux内核学习6——中断上半部分的代码分析及应用

这里来给大家演示一下Linux中的简单的中断程序一、查看中断中断常见的应用是在驱动程序中,例如我们的键盘鼠标,每次我们的点按都会产生一个中断,从而让计算机识别。该实验是自己虚拟出一个设备,将该设备注册到系统中,之后用自己编写的中断服务例程来使用中断,首先看一下当前系统中的中断。输入cat /proc/interrupts这是我们系统中当前的中断第一列:IRQ序号CPU0/CPU1/CPU3/CPU4分别是当前CPU上发生中断的次数下一列:中断控制器名称,比如IO-APIC最后一列:设备

2021-12-07 12:26:35 1071

原创 Linux内核学习5——Linux内存映射实现

下面介绍一下Linux内存映射的实现一、基础概念1、mmap文件映射mmap是一种内存映射文件的方法,将一个文件映射到进程的地址空间,建立文件磁盘地址和进程虚拟地址的一种对应关系,如此进程通过读取相应的虚拟地址就可以直接读取相应文件中的内容。这样映射的最大好处是进程可用直接访问内存,避免了频繁的使用read/write等文件系统的系统调用。需要注意的是mmap并不分配物理内存,它所做的最重要的工作就是为进程映射区的虚拟地址建立页表项从图上可以看出进程的虚拟地址空间,是由多个虚拟内存区域构成的。如

2021-11-26 21:14:44 2144

原创 Linux内核学习4——打印进程描述符task_struct中的字段

我们来动手实践打印进程描述符task_struct中的字段这里采用的方式是:插入内核模块,使用的方法是:遍历进程链表一、task_struct初步解读首先要下载自己的源代码,可以参考我之前的博客https://blog.csdn.net/weixin_45730790/article/details/121294180?spm=1001.2014.3001.5501可以使用bootlin在线查看源代码在include文件的目录下打开头文件。task_struct结构位于sched.h头文件中。/i

2021-11-20 10:08:00 2587

原创 Linux内核学习3——虚拟地址转换成物理地址

这里,我们讲解一下Linux是如何将虚拟地址转换成物理地址的一、地址转换在进程中,我们不直接对物理地址进行操作,CPU在运行时,指定的地址要经过MMU转换后才能访问到真正的物理内存。地址转换的过程分为两部分,分段和分页。分段机制简单的来说是将进程的代码、数据、栈分在不同的虚拟地址段上,从而避免进程间的互相影响。分段之前的地址我们称之为逻辑地址,它有两部分组成,高位的段选择符和低位的段内偏移。在分段时先用段选择符在相应的段描述符表中找到段描述符,也就是某一个段的基地址,再加上段内偏移量就得到了对应的

2021-11-19 19:11:03 9494

转载 Makefile文件的编写

一、为什么需要Makefilemakefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。二、Makefile的好处makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的

2021-11-14 11:08:45 773

原创 Linux内核学习2——内核模块的插入和删除

学习内核模块编程,第一个小程序当然是hello,kernel!了,这里讲解一下简单的内核模块的插入和删除操作在编写Linux内核模块时,主要分为以下四步:1.首先编写自己的.c文件2.然后编写自己的Makefile文件3.之后使用make命令来对自己的.c文件进行编译,生成.ko文件4.最后的.ko文件就是我们所需的模块了,我们就是对它来进行插入和删除操作1.首先编写hello.c文件#include<linux/module.h>#include<linux/kerne

2021-11-13 16:48:31 1060 2

原创 Linux内核学习1——Linux内核编译安装

一、使用VScode连接远程Linux服务器首先介绍一下比较方便的编辑内核文件的方法连接远程服务器的方法有很多,比如可以借助XShell、putty等软件使用ssh命令来登录远程服务器。但如果使用这种连接方法在远程服务器上进行开发工作,会来带诸多不便,比如:全程只能在终端使用指令操作,文件操作麻烦。写代码不方便,我们可能会先在本地写好代码再使用scp指令把源代码传送到服务器再运行,或直接在服务器上使用Vim或Vi进行编辑,这些操作起来我个人觉得都不顺手。服务器上的图片无法查看,比如有时候我们的程

2021-11-12 19:18:25 4196

原创 网络抓包实用入门

本篇将图文并茂教你如何使用抓包工具视频传送门https://www.bilibili.com/video/BV1xr4y1T7cT?from=search&seid=13479764516650154973&spm_id_from=333.337.0.0一、安装本文为大家介绍一个非常好用的抓包工具,科来。下载地址:http://www.colasoft.com.cn/下载科莱下载完毕,双击直接下一步即可安装。二、界面介绍双击桌面图标:科来​启动界面如下:启动界面

2021-09-09 10:10:07 1896

原创 Django项目部署到云服务器

Django项目部署到云服务器1.购买阿里云服务器,用xshell进行连接​ 记得要开启相应的端口2.上传代码至git仓库git initgit add .git commit -m "first commit"git push origin master3.在服务器拉取相应代码git clone xxxx4.根据requirement.txt安装依赖在开发机上导出pip3 freeze > requirements.txt查看依赖cat requirenment.t

2021-09-03 23:19:26 2626

原创 nginx基础入门

Nginx前言:本篇文章是作者在B站学习nginx视频的笔记视频传送门:https://www.bilibili.com/video/BV1zJ411w7SV?from=search&seid=8613744676803918016内容概览1、nginx简介(1)介绍nginx的应用场景和具体可以做什么事情(2)介绍什么是反向代理(3)介绍什么是负载均衡(4)介绍什么是动静分离2、nginx安装(1)介绍nginx在linux系统中如何进行安装3、nginx常用的命令和配置文件

2021-09-01 19:42:27 437

原创 LayUI基础入门

前言:本篇文章是作者在B站学习LayUI视频的笔记视频传送门:https://www.bilibili.com/video/BV19V411b7sx文章目录LayUI1.主要内容2.LayUI 的安装及使用2.1. LayUI 的介绍2.2. LayUI 的特点2.3. 下载与使用3.页面元素3.1. 布局3.1.1. 布局容器3.1.1.1. 固定宽度3.1.1.2. 完整宽度3.1.2. 栅格系统3.1.2.1. 栅格布局规则3.1.2.2. 响应式规则3.1.2.3. 列边距3.1.2.4. 列

2021-08-21 00:33:53 634

转载 六、JQuery-Ajax

前言:本篇文章是作者在B站学习JQuery视频的笔记视频传送门:https://www.bilibili.com/video/BV1vD4y1S7SG?p=33&spm_id_from=pageDriver文章目录一、Json格式介绍二、Ajax获取Hello,world三、Ajax检查用户名是否存在四、Ajax加载学生信息AJAX 是一种与服务器交换数据的技术,可以在不重新载入整个页面的情况下去访问服务器后端的数据。一、Json格式介绍<!DOCTYPE html><

2021-08-18 15:59:22 85

转载 五、JQuery制作页面导航

前言:本篇文章是作者在B站学习JQuery视频的笔记视频传送门:https://www.bilibili.com/video/BV1vD4y1S7SG?p=33&spm_id_from=pageDriver文章目录一、普通二级下拉菜单二、无限级下拉菜单三、水平伸缩菜单四、TreeView菜单一、普通二级下拉菜单<!DOCTYPE html><html> <head> <meta charset="utf-8" />

2021-08-18 10:02:13 420

转载 四、JQuery动画

前言:本篇文章是作者在B站学习JQuery视频的笔记视频传送门:文章目录一、show、hide、toggle和toggleClass二、fadeIn、fadeOut、fadeToggle、fadeTo三、slideDown、slideUp和slideToggle四、animate()自定义动画五、scrollLeft或scrollTop滚动HTML内容六、图片轮播效果一、show、hide、toggle和toggleClass实现图片显示隐藏:<!DOCTYPE html><ht

2021-08-17 17:01:55 139

转载 三、JQuery事件

前言:本篇文章是作者在B站学习JQuery视频的笔记视频传送门:https://www.bilibili.com/video/BV1vD4y1S7SG?p=33&spm_id_from=pageDriver文章目录一、页面载入事件二、鼠标常用事件三、绑定事件四、事件的冒泡现象五、Jquery表单验证六、实现样式切换的导航菜单一、页面载入事件页面载入事件的四种写法:<!DOCTYPE html><html> <head> <

2021-08-17 16:19:03 181

转载 二、JQuery操作DOM

前言:本篇文章是作者在B站学习JQuery视频的笔记视频传送门:https://www.bilibili.com/video/BV1vD4y1S7SG?p=33&spm_id_from=pageDriver文章目录一、JS获取DOM元素和JQuery获取DOM元素的区别二、jQuery对象和DOM对象的相互转换三、鼠标点击变换标签样式($(this)的使用)四、添加和删除样式五、设置和获取元素内容六、文本框文字显示和消失(模拟placeholder)七、使用attr修改元素的属性八、元素内部添加

2021-08-16 22:56:24 300

转载 一、JQuery选择器

前言:本篇文章是作者在B站学习JQuery视频的笔记视频传送门:https://www.bilibili.com/video/BV1vD4y1S7SG?p=18&spm_id_from=pageDriver文章目录一、$(document).ready() 的使用二、show,hide,toggle显示隐藏三、toggleClass与toggle的使用四、常用选择器(1)基本选择器(2)层次选择器(3)基本过滤选择器(4)内容过滤选择器(5)可见性过滤选择器(6)属性过滤选择器(7)子元素过滤选

2021-08-14 16:10:58 215 2

原创 python马士兵学习笔记

文章目录十一章 异常python异常处理机制python中常见的异常类型traceback模块的使用pycharm开发环境的调试十二章 类与对象定义python中的类对象的创建类属性、类方法、静态方法的使用方式动态绑定属性和方法十三章 面向对象面向对象的三大特性----封装、继承、多态封装的实现方式继承及其实现方式方法重写Object类多态特殊方法和特殊属性类的浅拷贝与深拷贝十四章 模块什么叫模块、模块化编程的好处模块的导入以主程序方式运行python中的包python中常用的内置模块第三方模块的安装与使用

2021-07-18 19:09:36 2727 5

LayUI学习资料.zip

本人在b站学习LayUi的代码+笔记

2021-08-21

Git入门教程.pdf

路飞学城Git入门教程 视频链接https://www.bilibili.com/video/BV1pD4y1m7bX?p=30&spm_id_from=pageDriver

2021-08-14

python爬虫课件+代码.zip

跟着路飞学城樵夫老师一点点敲的,都能跑通,后面的爬取数据添加到excel和mysql数据库是看的另外老师的视频

2021-07-25

空空如也

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

TA关注的人

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