- 博客(41)
- 收藏
- 关注
原创 Linux_kernel内核定时器14
PC机上的串口设备是一种独占式访问的设备(只能有一个进程进行访问),独占式操作的实现是在串口的驱动程序中实现的,我们希望按键设备只允许一个进程进行访问。竞态就是竞争的状态,竞争的是共享资源,在硬件设备的角度说,所谓的共享资源指的是:UART、LCD、声卡、网卡。
2024-10-11 18:45:31
1134
原创 Linux_kernel中断系统13
在系统启动 \ 热插拔 和动态加载模块时,自动创建设备节点文件系统中的/dev目录下的设备节点都是由mdev创建的在加载模块时根据驱动程序,可以在/dev/目录下自动创建设备文件中断处理函数存在的疑虑【1】Linux系统希望中断上下文处理的越快越好(不应该有printk函数,其不具可重入性)【2】中断处理函数中不应该有返回值【3】中断处理函数中不应该有额外的参数。
2024-10-11 18:44:41
831
原创 Linux_kernel字符设备驱动12
在Linux_kernel驱动开发11中,我们介绍的系统调用。只是为了做一个实验,在真正开发时,我们并不会直接在内核中添加一个新的系统调用,这样做会导致内核体积变大。 我们实现一个硬件字符设备的驱动程序,实际上是实例化一个struct cdev类型的对象。
2024-10-03 11:51:06
763
原创 Linux_kernel驱动开发11
Linux内核本质上就是一个巨大的裸板程序,所有的函数都是自身实现的标准C库系统调用说明fopenopensys_open打开文件fcloseclosesys_close关闭文件freadreadsys_read读文件fwritewritesys_write写文件学习Linux内核最好的老师就是内核源码,遇到不会用的函数,去找内核源码。printk是内核中的打印函数,它输出到内核自己维护的缓冲区。
2024-09-09 14:51:18
1233
原创 Linux_kernel移植rootfs10
busybox被称为嵌入式领域的瑞士军刀,体积小、功能强悍,它是一个集成了很多最常用的Linux命令和工具的软件,包含了常用的命令,如:cd、ls、cp、mv、echo。在uboot中的bootargs环境变量有过init=/linuxrc,linuxrc就是1号进程对应的程序,我们需要在etc目录中对其进行配置,仿照着busybox的源码。busybaox生成的命令都是busybox文件的符号链接文件,并且生成的命令并不全,是PC机的精简版。ext4是我们的手机、电脑、平板会经常使用的文件系统的类型。
2024-09-08 16:05:06
1265
原创 Linux_kernel移植linux09
【1】入口点文件:arch/arm/kernel/head.S【2】设置SV管理模式【3】检查CPU-ID【4】创建页表【5】使能MMU【6】清空BSS,拷贝数据段【9】创建内核线程【a】准备命名空间【b】挂载根文件系统【c】执行1号进程【d】执行后续进程【e】执行/bin/sh【f】执行用户输入的命令。
2024-09-07 10:52:51
898
原创 Linux_kernel原理08
【1】设置cpu为svc管理模式【2】关闭看门狗,防止系统复位重启【3】禁止L1 L2缓存,以及关闭MMU,使用物理地址【4】检验CPU-ID是否合法,防止不法厂商【5】清除BSS段【6】打开MMU,使用虚拟地址【7】跳转到board_init_f初始化硬件(关键!!!【8】跳转到board_init_r指定堆栈区域,初始化EMMC(关键!!!
2024-09-06 09:44:45
916
原创 Linux_kernel移植uboot07
【1】移植uboot对应固件工程师(固化到硬件里的软件程序)例如:ESP8266WiFi模块,内部集成了TCP/UDP协议栈,是由乐鑫公司固件工程师实现的【2】移植Linux内核对应Linux内核工程师【3】移植根文件系统对应系统集成开发工程师用户名:root密码:123456由于是挂载的根文件系统,所以PC机在/nfs_share目录中创建的文件,在开发板的根中可以找到;在开发板的根中创建的文件,在PC机的/nfs_share目录中可以找到;
2024-09-06 09:44:13
1471
原创 Linux_kernel汇编驱动06
②如果不能用一条指令来实现ADR伪指令的功能,编译器将报错,因为ADR伪指令中的地址基于PC或者基于寄存器的,所以ADR读取到的地址为位置无关的地址。当ADR伪指令中的地址是基于PC时,该地址与ADR伪指令必须在同一代码段中。①在汇编编译器处理源程序时,ADRL伪指令被编译器替换成两条合适的指令,即使一条指 令可以完成该伪指令的功能,编译器也将用两条指令来替换该ADRL伪指令。5、发现有中断/异常产生,开始处理,对于不同的异常,会跳去不同的地址执行程序,在这些地址上,只是一条跳转指令,跳去执行摸个函数。
2024-09-05 08:26:00
686
原创 Linux_kernel汇编指令05
用来检测stack是否overflow,可以把stack的最低端写入sl寄存器中,这样处理后,如果sp指向的地址低于sl寄存器里面的值时,就会触发栈溢出的错误。我们可以使用桟帧(stack frame)来区分,桟帧就是一个函数所使用的stack的一部分,所有函数的桟帧穿起来就是一个完整的栈,桟帧的两个边界分别是由fp和sp来限定。在函数的调用过程中,通常使用栈帧结构,也就是sp指针总是指向程序的顶端,同时设置fp来保存当前函数在栈上的基地址。Rn基址寄存器,存储传送数据的起始地址(Rn不能是R15)
2024-09-04 07:54:25
784
原创 Linux_kernel汇编04
{cond} 条件码是先决条件,只要指令加入了条件码,则执行该指令时,先去判断CPSR寄存器的状态标志位,根据结果去执行或不执行汇编指令{S} 影响CPSR寄存器的NZCV位,只要指令加入了设置状态码,则执行完该指令后,根据指令的执行结果去设置CPSR寄存器NZCV位的值,属于后置条件,CMP、TST、TEQ这三条指令不加了设置状态码也会影响CPSR寄存器的NZCV位有三种形式【1】立即数【2】寄存器。
2024-09-03 07:23:22
712
原创 Linux_kernel下位机03
uboot就是universal bootloader(通用的启动代码),具有移植性uboot是由一个德国工程师发起的开源项目,然后网络上众多的用户共同维护的一个bootloaderuboot经过很多年的发展,现在大部分的嵌入式电子产品都会选择uboot作为设备的bootloaderuboot的核心功能【1】负责初始化硬件【2】负责加载引导操作系统的启动ARM有7种工作模式:【1】SVC(管理模式)处理器复位后会进入到该模式执行软中断指令(SWI)后会进入到该模式(按下复位键)
2024-09-02 09:42:58
734
原创 Linux_kernel烧写Uboot02
Ubuntu的Linux操作系统(18.04 20.04 22.04)前面的版本号是双数,后面的版本号是04lsb_release -a 用于查看系统版本号uname -a 查看系统位数/内核版本号。
2024-08-31 09:44:05
747
原创 Linux_kernel简介01
我们使用的开发板的芯片是三星公司的芯片(S5P6818),内核的核心是ARM公司的V8架构ARM-CORTEX-A53(8核)定制版与S5P6818类似的还有一个芯片是S5P4418,内部的核心使用的是ARMV7架构ARM-CORTEX-A9(4核)S5P6818与S5P4418从外观上来看一模一样,这样打出来的电路板可以直接套用两款产品,提高了工作效率。
2024-08-30 08:48:12
923
原创 Windows10、ARM开发板、虚拟机Ubuntu可同时上网
setenv ipaddr 192.168.137.6 // 设置uboot的IP,与本地连接在同一网段,但 不能重复。setenv serverip 192.168.137.8 // 设置服务端的ip,需要和连通的目标ip相同。setenv gateway 192.168.137.1 // 设置网关,与本地连接ip相同。setenv netmask 255.255.255.0 // 设置子网掩码,与本地连接相同。3、查看本地连接的网卡名称。
2024-08-12 21:59:28
666
原创 C++异常处理、IO操作09
有一个全局变量errno,errno的不同值对应不同的出错原因字符串,我们通过perror()或strerror()进行打印输出。【3】fstream--->iostream--->istream和ostream--->ios--->ios_base。【2】catch 捕获异常[如果异常发生了,捕获这个异常,并给程序一个起死回生的机会(重新赋值\重新操作)]1】当类内的函数使用虚函数时,可以利用多态性,允许在派生类中覆盖异常抛出和处理逻辑。在C++中也有丰富的IO类,iostream就是一个IO类。
2024-07-22 21:56:28
908
原创 C++容器、迭代器07
STL就是标准模板库的意思(Standard Template Library)STL的代码从广义上来讲分为三类:【1】algorithm(算法):为容器提供了大量的操作,例如:排序\查找、、、【2】container(容器):用来存储管理大量的数据,其实就是数据结构【3】iterator(迭代器):架起容器和算法的桥梁,将容器与算法结合到一起STL标准模板库的实现就是采用了模板类和模板函数的方式,使其更加通用。迭代器是指针的一种泛化,允许C++程序使用统一的方式来处理不同的数据结构。
2024-07-20 16:43:10
823
原创 C++模板函数06
模板是为了泛型编程,泛型编程是一种使用模板来编写程序的方式,可以让程序员编写与具体数据类型无关的代码,这种方式可以最大限度地提高代码的复用性和灵活性。泛型编程理解为广泛类型函数的参数可以在函数调用的时候指定,函数在当以的时候参数是通用的类的成员变量类型,在实例化对象的时候才能确定。
2024-07-18 11:05:26
740
原创 C++重载05
一个新的类获得了已有类的属性和方法,这个形式就是继承【1】新的类称为子类或者派生类【2】已有的类称为父类或者基类class 派生类名 : 访问修饰符 基类名运算符重载,就是对已有的运算符重新进行定义,赋予另一种功能,来适应不同的数据类型。
2024-07-12 19:10:21
930
原创 C++继承、多态04
【1】继承的意义【2】继承关系【3】继承方式【4】继承----构造函数【5】继承----析构函数【6】基类和派生类函数重名了怎么办?【7】多继承【8】虚继承。
2024-07-11 20:02:41
1017
原创 C++友元、静态成员03
1)封装的简介封装是C++三大特性之一,防止函数直接访问类的内部成员2)封装的意义【1】实现类的属性(变量)与行为(函数)【2】对属性和行为的权限加以控制(需要使用修饰类成员的关键字)
2024-07-10 21:16:06
1277
原创 C++类的定义02
变量;类;函数;指针;} // 注意最后没有分号使用class关键字(使用struct关键字也可以),class用于定义类,是抽象的概念,当只定义了类时,这个类不占用存储空间,只有在创建对象的时候会占用存储空间。封装是C++面向对象的三大特性(封装,继承,多态)之一,防止函数直接访问类的内部成员,允许我们将对象的实现细节隐藏起来,只公开必要的接口让使用者调用,这样可以帮助程序员提高代码的可读性和可维护性以及安全性。类成员的访问限制是通过在类主题内部对各个区域标记类成员关键字来制定的。
2024-07-10 19:01:12
680
原创 C++面向对象01
默认参数值只能在函数声明中指定,而不能在函数定义中指定。如果同时有声明和定义,并且两者都试图为同一个参数指定默认值,这会导致编译错误。
2024-07-09 19:58:28
1115
原创 Mr.张小白(Linux文件操作、网络配置04)
Linux ls(英文全拼: list directory contents)命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。
2024-03-29 12:49:22
484
1
原创 Mr.张小白(Linux文件操作、用户管理03)
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组实例中,文件的第一个属性用表示。d 在 Linux 中代表该文件是一个目录文件。
2024-03-29 10:34:00
934
1
原创 Mr.张小白(C语言基础01)
/导入头文件//#include -->适用于系统文件//#include "头文件名称" -->适用于个人写的头文件//头文件的后缀都是.h c语言源程序的后缀都是.c//头文件命名规则 std io//std 标准库 标准库在任何操作系统上都是一样的//sys 系统库 不同操作系统的系统库用法不一样//导入头文件就是导入一些功能//主函数//主函数是操作系统内核调用//主函数是程序执行的起点int main()//printf 格式化输出int b=1000。
2024-03-26 17:32:44
228
1
原创 Mr.张小白(Linux基础01)
home:普通用户的家目录root:root用户的家目录boot:系统引导文件usr:unix系统文件bin:二进制文件命令lib:库文件etc:配置文件(密码、用户)var:日志文件tmp:临时文件mnt:挂载文件。
2024-03-25 17:07:02
170
原创 Mr.张小白(案例:基于Spring MVC实现文件上传和下载)
使用IDEA搭建Spring MVC环境在环境中制作《文件上传与下载》主要了解文件在Spring MVC环境下的下载与上传功能的流程与实现
2022-12-04 18:04:10
398
1
原创 Mr.张小白(案例:基于Spring MVC实现后台登陆系统验证)
使用IDEA搭建Spring MVC环境在环境中制作《后台登陆系统验证》主要了解拦截器的使用以及在Spring MVC环境下项目的搭建
2022-11-27 13:12:06
1821
4
原创 Mr.张小白(案例:基于Spring实现用户登录)
使用IDEA搭建Spring环境在环境中实现用户登录系统主要了解:1、SpringJDBC和JdbcTemplate的相关操作及使用2、Spring事务管理的运行方法
2022-11-20 10:32:14
3657
3
原创 Mr.张小白(案例:基于MyBatis注解的学生管理程序的实现)
使用IDEA搭建MyBatis环境在环境中制作《学生管理程序系统》主要了解在MyBatis中注解方式的使用
2022-11-12 14:41:37
1397
1
原创 Mr.张小白(案例:商品的类别的MyBatis的实现)
使用IDEA搭建MyBatis环境在环境中制作《商品的类别》主要了解在MyBatis中实体类、映射文件、配置文件的相关联系及配合MySQL的实际运用
2022-11-06 20:51:24
3276
3
原创 Mr.张小白(案例:学生信息查询系统的MyBatis的实现)
使用IDEA搭建MyBatis环境在环境中制作《学生信息查询系统》主要了解在MyBatis中动态SQL的使用
2022-10-30 08:53:00
3201
2
SevenDay-Spring MVC(基于Spring MVC实现文件上传与下载)的源代码
2022-12-04
SixDay-Spring MVC(基于Spring MVC实现后台登陆系统验证)的源代码
2022-11-27
FiveDay-Spring(基于Spring实现用户登录)的源代码
2022-11-20
FourDay-MyBatis(基于注解的学生管理程序)的源代码
2022-11-12
ThreeDay-MyBatis(商品的类别)的源代码
2022-11-06
TwoDay-MyBatis(学生信息查询系统)的源代码
2022-10-30
OneDay-MyBatis(员工管理系统)的源代码
2022-10-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人