自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 virtualbox启动虚拟机时报错:Error relaunching VirtualBox VM process:5....

否则:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vboxsup,将start的类型:由1改为2:(原理是将1启动时加载服务更改为2由服务控制管理器自动加载)解决方法:打开安装目录→ drivers/vboxsup/→ 选中.inf文件 右键安装,安装好后屏幕会刷新一下→ 安装完成后卸载软件,删除下图两个文件后重新安装→ 打开注册表→。但这种可能会遇到没有这个路径的情况,后来进一步查资料发现需要重新安装驱动。

2023-04-01 14:21:01 4544 1

原创 【安装SSH服务】ubuntu安装ssh以及开启root用户ssh登录

一般Ubuntu都会默认安装openssh-client,但是没有安装openssh-server一、安装sshsudo apt install openssh-clientsudo apt install openssh-serversudo service ssh start检查是否启动成功: 或者查看ssh是否启动: 二、root用户密码修改设置root密码执行命令后,依次输入当前登录用户密码,要设置的root密码,确认root密码三、开启root用户ssh登录输入root账户的用户名

2022-06-22 22:40:30 16082

原创 VirtualBox四种网络模式特点

virtualbox集中网络简介模式特点:VirtualBox四种网络模式仅主机模式、NAT模式、桥接网络和内部网络模式介绍https://blog.csdn.net/qq_28513801/article/details/90138491

2022-06-22 22:26:37 990

原创 【Linux】Ubuntu20.04配置静态固定IP地址

Ubuntu20.04.2配置静态固定IP地址Ubuntu从17.10开始,放弃在/etc/network/interfaces里面配置IP,改为在/etc/netplan/XX-installer-config.yaml的yaml文件中配置IP地址。查看网络配置信息在Ubuntu20.04中,默认没有安装ifconfig,因此使用ip addr命令拓展:可以使用 命令查看网关或者使用nmcli 查看,需要执行安装sudo apt install network-manager修改配置文件使用熟悉

2022-06-22 22:23:36 33574 3

原创 【samba】Ubuntu20.04安装并配置Samba服务

查看当前Ubuntu 的版本号检查是否成功安装samba服务:samba -V (如果出现下面版本号说明已经安装了samba服务器)如果安装失败,请检查你的网络,确认linux可以访问互联网,若可以联网请尝试更换ubuntu镜像源,桌面版直接在软件和更新中配置,服务器版百度上很多此步骤可选 我直接把整个工作目录设置为共享文件夹添加samba用户,用于其他人或设备认证,这里添加的用户需要在系统账号中存在,否则添加失败可选创建用户名映射文件并配置(根据配置文件来定义)拓展:7、备份 smb.

2022-06-22 21:12:36 26126 3

原创 Oracle Virtual Box 安装及黑屏踩坑记录 以及ubuntu中文目录的问题

安装方法查看 https://zhuanlan.zhihu.com/p/111567471安装过程遇到的问题中间遇到安装过程下一步的按钮显示不全的问题解决方法简单粗暴:Alt+鼠标左键 (16.04版本亲测有效,18.04版本亲测无效)或者Win+鼠标左键 (18.04版本亲测有效)拖动安装界面,即可显示内容。这个设计真是让人无力吐槽啊!安装过后黑屏问题或者无法开机的问题首先也是尝试了网上的很多方法:cmd管理员身份运行:netsh winsock reset 【网上大多是这个,但

2022-03-20 18:11:47 2368

原创 树莓派上创建个人用户

自从安装好了以后,树莓派的使用一直用的是默认账户。出于折腾的心理,打算创建一个个人的用户。在公司使用各种权限受限的电脑,我不是很想让自己创建的用户束手束脚。为此想直接创建一个权限等同于pi的用户。获取pi的权限很简单,groups查看一下pi的用户组即可。接下来使用下面的命令创建我自己的用户:sudo useradd -m xxxx -G pi adm dialout cdrom sudo audio video plugdev games u...

2021-03-29 20:42:38 480 1

原创 设计模式之工厂模式

什么是工厂模式工厂模式是最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式的实现cat.c(文件名)#include "animal.h"void catEat(){ printf("eat fish\n"); return;}void catBeat(){ printf("zhua\n"); return;}struc

2020-12-09 20:27:50 132

原创 软件设计模式

软件设计模式软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。总的来说:就是代码设计经验的总结,能够让代码稳定,拓展性更强,一系列编程的思想。设计模式有23种,代码容易被他人理解,保证代码可靠性,程序的重用性,要慢慢的积累。算法:算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。百科讲

2020-12-09 17:31:08 223

转载 虚拟内存(虚拟地址, 页表,换页...)

第一阶段:没有内存抽象没有内存抽象对于内存的管理通常非常简单,除去操作系统所用的内存之外,全部给用户程序使用。或是在内存中多留一片区域给驱动程序使用,如图1所示。图1. 没有内存抽象时,对内存的使用第一种情况操作系统存于RAM中,放在内存的低地址,第二种情况操作系统存在于ROM中,存在内存的高地址,一般老式的手机操作系统是这么设计的。如果这种情况下,想要操作系统可以执行多进程的话,缺陷:多线程直接操作内存,会产生冲突。唯一的解决方案就是和硬盘搞交换,当一个进程执行到一定程度时,整个存

2020-12-05 23:10:01 1218

原创 树莓派底层IO驱动开发示例(一个简单io口驱动的开发)

一、驱动代码的开发1.树莓派寄存器的介绍点击查看:树莓派(bcm2835芯片手册)GPFSEL0 GPIO Function Select 0: 功能选择 输入/输出GPSET0 GPIO Pin Output Set 0 : 输出0GPSET1 GPIO Pin Output Set 1 : 输出10 = No effect1 = Set GPIO pin nGPCLR0 GPIO Pin Output Clear 0: 清零0 = No effect1 = Clear

2020-12-05 23:02:27 1087 1

转载 copy_from_user和copy_to_user

前言copy_from_user和copy_to_user这两个函数相信做内核开发的人都非常熟悉,分别是将用户空间的数据拷贝到内核空间以及将内核空间中的数据拷贝到用户空间。这两个函数一般用于系统调用中,前者将用户空间参数拷贝到内核,后者将系统用的结果返回到用户空间。用户空间和内核空间Linux将地址空间分为用户空间和内核空间,内核文档Documentation/arm64/memory.txt中定义了内核地址空间和用户地址空间的范围,比如4K Page +4 level页表时,地址空间分布如下:

2020-12-05 20:59:51 315

原创 ioremap

1、一般我们的外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器、数据寄存器三大类。外设的寄存器通常被连续编址,并且根据CPU的体系架构不同CPU对IO端口的编制方式有两种: IO映射方式(IO-mapped):比较典型的有X86处理器为外设专门实现了一个单独的地址空间,称为“IO端口空间”或者“IO地址空间”,此时CPU可以通过专门的指令(比如X86的IN和OUT)来访问这个“IO端口空间”。 内存映射方式(memory-mapped):RISC指令系统的CPU一般只实

2020-12-05 20:58:50 300

原创 微机总线地址,物理地址 ,虚拟地址

总线地址地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。自己理解:cpu能够访问内存的范围现象:装了32位的win7系统,明明内存条8G,可系统只是别了3.8G ,装了64位才能识别到8G。装了32位的操作系统CPU的访问范围是2^32 bit,就是4194304kbit,就是4096Mbit,等于4G,也就是说只有4G用来访问内存,另外的用于其他的用途。

2020-12-05 15:15:22 294

原创 基于驱动框架编写驱动代码

字符设备驱动框架#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init __exit 宏定义声明#include <linux/device.h> //class devise声明#include <linux/uac

2020-12-05 14:10:02 168

原创 linux中.so、.ko、.a、.o文件区别

1、对于.so文件.so文件是用户层的动态链接库,用于用户层的动态链接使用,内核态的代码同样不能直接访问。2、对于.ko文件.ko文件是内核态的动态链接库,用于内核态的动态链接使用,可以用于内核之间的模块相互调用。用户态的代码不可直接调用内核态的代码,但是可以通过其他方式进行通信。3、对于.a文件.a文件是用于静态链接时,使用的静态库。4、对于.o文件.o文件是目标文件,编译生成,.a文件就是由.o文件打包生成的。...

2020-12-05 14:04:18 2908

原创 Linux驱动认知

用户态App:cp指令,ftp的项目等等这就是App的开发。App开发需要C的基础和C库,C库讲到文件,进程,进程间通信,线程,网络,界面(GTk)。C库(是linux标准库一定有):就是Clibary,提供了APP支配内核干活的接口,调用的open,read,write,fork,pthread,socket由此处封装实现,由写的应用程序调用,C库中的各种API调用的是内核态,支配内核干活内核态进程,内存,线程,网络,设备驱动不需要上层应用开发者关心,驱动在前面的学习是调用wringpi库实现

2020-12-05 13:59:56 174

原创 Linux内核结构介绍

内核结构框图应用程序(基础C加C库)通过函数库(C库),C库提供了应用程序支配内核干活的接口,虚拟文件系统和系统调用接口其实是重合的。下面我们以如何打开一个文件来说明具体的步骤——应用程序调用open,read,write这些函数(来自于C库),C库和系统调用接口打交道,系统调用接口可以操作底层的各种东西,可以做进程线程相关的东西,也可以访问各种不同的文件系统,我们在应用程序中调用open ,read ,write函数,在系统调用接口就会调用sys_open,sys_read ,sys_write,

2020-12-05 13:56:40 127

原创 文件系统认知

什么是文件系统?常规认知是:linux根目录那些东西百科:文件系统是操作系统用于明确存储设备组织文件的方法,操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。以上说的方法:就是文件管理系统(程序),简称文件系统。文件系统(文件管理系统的方法)的种类有哪些呢FAT ,NTFS(windows) ,EXT1/2/3(linux常用的),HFS VFAT …等树莓派中查看文件系统的指令是:df -T如图:其中可以看出来type(文件系统的类型)有:V

2020-12-05 13:46:20 158

原创 Linux树莓派源码配置及编译镜像

驱动代码的编写需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成.config文件,该文件指导Makefile去把有用的东西组织成内核。如何生成.config文件:第一种方式:厂家配linux内核源码,比如说买了树莓派,现在要研发树莓派的底层,厂家会提供树莓派linux内核源码,直接cp 厂家.config .config第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置的。第三种方式:完全自己来如何配置树莓派linux的内...

2020-12-04 13:26:41 860

转载 ssh连接服务器出现:ssh: connect to host 192.168.1.107 port 22: Connection refused 的解决方法

文章目录:1 说明遇到问题场景 2 解决方式1 说明遇到问题场景1、我的系统环境windows10 连接的服务器系统为:Mint19.32、我使用windows,在局域网下通过ssh连接服务器报错:ssh: connect to host 192.168.1.107 port 22: Connection refusedshl@shliangPC MINGW64 ~$ ssh [email protected]: connect to host 192.168.1.107

2020-12-04 12:57:48 5163

原创 Ubuntu20.04 ifconfig的安装

安装ifconfig:输入指令:sudo apt-get install net-tools

2020-11-16 14:15:53 4731 5

原创 Linux内核源码树

linux内核源码树扫盲分析sudo apt-get install tree//下载treetree//输入指令(该指令可以检查第三方工具包里的内容是否完整)可以看到如图的树状结构:linux内核源码:为什么内核大约1.3w个c文件,1100w行代码?linux是一个开源的,支持多架构多平台代码,可移植性非常高。但是linux内核编译出来一般就若干M,因为支持多平台,多架构,所以编译之前要配置,配置成适合目标平台来用。代码编译出来是给一个平台一个架构来用的,很多代码是不参与编译的

2020-11-16 14:14:34 245

原创 嵌入式设备带操作系统的启动过程

树莓派等芯片带操作系统的启动过程C51,STM32(裸机)--------》c直接操控底层寄存器,实现相关业务。x86 , Intel等架构跑的是windows操作系统。启动过程:电源 -》BIOS-》windows内核-》C盘,D盘-》程序启动(开机启动程序)嵌入式产品:树莓派,mini2440,mini6410,nanopi,海思,RK(瑞芯微)启动过程:电源-》BootLoader(引导操作系统启动)-》Linux内核-》文件系统(根据功能性来组织文件夹,带访问权限)-》文件系统起来以

2020-11-16 14:12:02 156

转载 交叉编译及树莓派(或其他平台)交叉编译工具链的安装

交叉编译是什么:交叉编译是一个行为,是在一个平台上生成另一个平台上的可执行代码。比如:我们在windows上面编写C51的代码,并编译成可执行代码,如xx.hex,是在C51上面运行不是在windows上面运行。同样:我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如xx.out,是在树莓派上面运行不是在linux上面运行。编译:是在一个平台上生成在该平台上的可执行的代码。C51 交叉编译的发生在kill(集成环境上面)为什么要交叉编译:平台上不允许或不能够安装我们所需要的编译器

2020-11-16 14:11:32 210

原创 带wiringPi库的交叉编译工具链的安装配置

一、交叉编译交叉编译是在一个平台上生成另一个平台上的可执行代码。编译:是在一个平台上生成在该平台上的可执行代码二、交叉编译工具链的安装https://github.com/raspberrypi/链接:https://pan.baidu.com/s/1cPIt-xZLye1DAQjq2yKzeg提取码:35vt(这个库不是很好,链接的库的格式不对,是宿主机的平台,需要自己将树莓派的wiringpi库(libwiringPi.so.2.50)拿来使用)带有WiringPi库如何交叉编

2020-11-16 14:09:57 170

转载 linux库引入之动态库静态库(生成和使用)

库:库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容。如何使用用户需要同时具有头文件和库。头文件(相当于说明书的作用,能够知道这个库能干嘛)制作出来的库(具体的实现,存放.c、.cpp)静态库:是在程序执行前(编译)就加入到目标程序中去了。优点:1、静态库被打包到应用程序中运行速度快2、发布程序无需提供静态库,因为已在app中,移植方便缺点:1、链接时完整的拷贝至可.

2020-11-16 14:00:01 183

原创 gettimeofday()函数的使用方法

gettimeofday函数1.定义:在C语言中可以使用函数gettimeofday()函数来得到精确时间。它的精度可以达到微妙,是C标准库的函数。2.函数原型:#include<sys/time.h>int gettimeofday(struct timeval*tv,struct timezone *tz )3.说明:gettimeofday()会把目前的时间用tv 结构体返回,当地时区的信息则放到tz所指的结构中4.结构体:1. timeval 结

2020-11-16 13:41:41 1949

转载 Linux 库引入之分文件编程

分文件编程好处将main函数和其他功能性函数放在不同的文件中,分模块的编程思想,分工明确,查找错误比较容易,责任可以划分清楚,程序也方便调试,并且主函数比较简洁。将文件从同一目录下的另一个文件夹拷贝到当前文件夹cp ../together.c(文件名称) .这个代码是没有分文件编程的#include <stdio.h>#include <stdlib.h>#include <unistd.h>void initscores(int datas[]

2020-11-15 20:00:28 86

原创 树莓派 VIM更新、安装GCC

1、可以用以下指令sudo apt-get install vim2、默认的是国外的源,apt-get 安装失败的时候,我们更换成国内的源。(1)编辑sources.list备份源文件。执行如下命令:sudo cp /etc/apt/sources.list /etc/apt/sources.list.baksudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak 2....

2020-11-15 19:55:57 915

原创 树莓派的几种登录方式及树莓派的网络配置

(1)HDMI 视频线 连接到显示器(2)串口设备破解:默认情况下,树莓派的串口和蓝牙连接,把串口用来数据通信。修改系统配置,启用串口登录树莓派1.打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存dtoverlay=pi3-miniuart-bt2.然后再修改根目录的"cmdline.txt",将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容。dwc_otg.lpm_enable=0 console=tty1 console=se

2020-11-15 15:22:26 494

转载 TCP/IP协议,TCP和UDP的区别及特点

这篇博客主要用来纪录自己对TCP/IP和UDP的个人理解,若有不对还请慷慨指正一些基础知识IP地址:用来标识网络中的一个通信实体的地址。通信实体可以是计算机、路由器等。 比如互联网的每个服务器都要有自己的IP地址,而每个局域网的计算机要通信也要配置IP地址。目前主流使用的IP地址是IPV4,但是随着网络规模的不断扩大,IPV4面临着枯竭的危险,所以推出了IPV6。IPV4:32位地址,并以8位为一个单位,分成四部分,以点分十进制表示,如192.168.0.1。因为8位二进制的计数范围是00000.

2020-11-15 15:08:56 492

转载 Linux下Socket网络编程

简介在进行socket网络编程之前,我们需要知道socket是什么?在Unix/linux操作系统中有一个哲学思想,那就是万物皆文件,socket也不例外,它是可读、可写、可控制、可关闭的文件描述符。使用socket网络编程实现服务端和客户端之间的通信步骤可由下图结构所示:服务端和客户端1.创建socketint socket(int domain, int type, int protocol);domain:系统使用的底层协议族。PF_INET(用于IPv4),PF_INET6(用

2020-11-15 15:06:32 235

原创 Linux网络编程——字节序、地址转换函数

1 .谈到字节序,那么会有朋友问什么是字节序很简单:【例如一个16位的整数,由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序的问题。】2 .那么什么是高字节、低字节?也相当简单:【一个16进制整数有两个字节组成,例如:0xA9。高字节就是指16进制数的前8位(权重高的8位),如上例中的A。低字节就是指16进制数的后8位(权重低的8位),如上例中的9。】大于一个字节的变量类型一般有两种表示方法:字节序是指多字节数据的存储顺序

2020-11-15 13:55:41 346

转载 pthread_self()函数返回的是“真正”的线程 ID 吗?——gettid 与 pthread_self 的简单辨析

线程ID获取的两种方法:1)gettid()函数2)直接调用pthread_self()我们分别用两个函数求父子主进程和其所属进程 id先看一下代码,我们可以先预期一下输出结果#include<stdio.h>#include<pthread.h>#include<unistd.h>//由于pthread用户库内没有gettid()所以需要这个头文件以及下面的函数定义#include<sys/syscall.h>pid_t getti

2020-11-15 12:36:32 3534

转载 getch(),getche()和getchar()使用区别

getchar()函数名:getchar() 头文件:stdio.h 功 能:从I/O流中读字符 原 型:int getchar(void);getch()  函数名:getch()  头文件:conio.h  功 能:从控制台读取一个字符,但不显示在屏幕上  原 型:int getch(void)  返回值:读取的字符getche() 函数名:getche() 头文件:conio.h 功 能:从控制台取字符(带回显) 用 法:int...

2020-11-15 12:32:20 390

转载 Linux高级编程基础——线程之多线程实现生产者消费者

用多线程实现生产者消费者:内容比较搞笑生动,更容易理解,有什么不懂得可以在下面留言#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <sys/types.h> int count = 1; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthrea

2020-11-15 12:30:05 112

原创 GCC中 -I、-L、-l 选项的作用

在makefile中经常会看到这些选项,gcc默认会在程序当前目录、path路径中查找所需要的材料如何给gcc添加我们自己的原材料(头文件,库等)-I (注意是大写的i) 给gcc添加自定义的头文件的路径 例如:我的头文件目录是myinclude-Imyinclude-L 给gcc添加额外的搜索库的路径 例如 :有一个库A所在的路径是目录B-LB-l(小写的L) 给gcc 指定具体的库 例如:gcc需要一个库A-lA整体举例:CC=g++CFLAGS=-gB

2020-11-15 10:45:47 5513

原创 vim中自动格式化代码

在vim中其实也有像Eclipse中的ctrl + shift +F 的自动格式化代码的操作,尽管非常强大,但是通常会破坏代码的原有的缩进,所以不建议在python这样缩进代替括号的语言中和源程序已经缩进过的代码中使用,废话少说,下面说步骤:1,gg 跳转到第一行 gg = G2,shift+v 转到可视模式3,shift+g 全选4,按下神奇的 =...

2020-11-14 11:06:11 146

原创 esp8266引脚图及功能

esp8266引脚图及功能ESP8266特性  *802.11 b/g/n*内置低功耗32位CPU:可以兼作应用处理器*内置10 bit高精度ADC*内置TCP/IP协议栈*内置TR开关、balun、LNA、功率放大器和匹配网络*内置PLL、稳压器和电源管理组件*支持天线分集*STBC、1x1 MIMO、2x1 MIMO*A-MPDU、A-MSDU的聚合和0.4 s的保护间隔*WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式*支持STA/AP/STA+AP工作模式

2020-11-14 11:05:42 24467

空空如也

空空如也

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

TA关注的人

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