- 博客(94)
- 收藏
- 关注
原创 C语言-指针
1. 指针就是内存单元的地址;存放地址的变量称为指针变量。一般形式:<存储类型> <数据类型> * <指针变量名> eg: char * pName;数据类型:指针指向的数据类型;int *p;int a;p = &a;向一个指针变量赋值时,送的值必须是地址常量或者指针变量,不能是普通的整数(除了赋零)指针的大小与操作系统的位数有关指针算术运算表(指针运算一般与数组相结合)指针加减得到的不是地址量,而是两指针之间相隔数据的个数、指针的p++等。
2025-03-18 16:20:39
1031
原创 笔试题总结,相关知识点总结
选项D:静态成员函数不拥有this指针,这个说法也是正确的,因为静态成员函数不属于任何对象实例,因此没有this指针。在C++中,this指针是一个隐含在每个非静态成员函数中的指针,它指向调用该成员函数的对象。选项B:当创建一个对象后,this指针就指向该对象,这个说法是正确的,因为this指针总是指向调用成员函数的对象。.成员变量通常属于该类的每个实例,但在某些情况下,比如通过静态变量,可以被该类的所有实例共享,故C正确。19.函数的实参可以是常量,变量,表达式,函数等,但必须是确定的值以便传给形参。
2024-10-07 22:05:11
568
原创 C++总结
min = 0;sec = 0;~Timer()operator int() //自定义强转类型符private:int hour;int min;int sec;Timer t;return 0;
2024-08-29 00:06:46
221
原创 数据库--sqlite3
callback 回调函数,只有在查询时,才传参。返回值:成功为0 SQLITE_OK ,出错 错误码。返回值:成功为0 SQLITE_OK ,出错 错误码。参数:arg 接收sqlite3_exec 传递来的参数。.schema 查看表的结构。1)系统命令 , 都以'.'开头。参数:filename 数据库名称。errmsg 错误消息。f_value 列的值得地址。3-- 查看数据库记录。f_name 列的名称。2-- 插入一条记录。4-- 删除一条记录。5-- 更新一条记录。
2024-06-30 22:24:34
798
原创 fly_bid项目
提供了创建窗口界面,移动光标,产生颜色,处理键盘按键功能问题等功能。vim界面,内核配置界面(make menuconfig)信号机制信号(signal)在Linux中,软中断信号(简称信号)是在软件层次上对中断的一种模拟,用来通知进程发生了异步事件。内核可以因为内部事件而给进程发送信号,通知进程来了某个事件信号相应的方式:1.忽略信号2.捕捉信号,即信号发生时执行用户自定义的程序处理3.执行缺省操纵,Linux对每种信号都规定了默认的相应的处理。
2024-06-29 21:12:17
266
原创 文件IO/标准IO
标准: 任何操作系统皆可使用;使用范围很广系统调用和库函数系统调用:操作系统给我们提供的接口man 2printf 可以调用内核中的接口 直接驱动显卡运行printf实际是库函数中的函数,然后调用系统调用原因:针对不同的操作系统,库函数可以翻译后成标准的系统调用对接不同的系统(安卓/linux)strlen memcpy 等函数 也是靠库函数实现man 3直接使用系统调用的---> 文件io系统调用就是操作系统提供的接口函数.
2024-04-13 23:09:14
1033
1
原创 input子系统开发
Linux内核为了两个目的:简化纯输入类外设(如:键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等)的驱动开发统一输入类外设产生的数据格式(struct input_event),更加方便应用层编程设计了输入子系统事件处理层:接收来自核心层上报的事件,并选择对应的handler(事件处理器 struct input_handler)去处理。内核维护着多个事件处理器对象,每个input_handler对象专门处理一类事件,所有产生同类事件的设备驱动共用同一个handler。
2024-03-24 21:43:56
628
原创 IIC总线
SOC芯片平台的外设分为:一级外设:外设控制器集成在SOC芯片内部二级外设:外设控制器由另一块芯片负责,通过一些通讯总线与SOC芯片相连Inter-Integrated Circuit: 字面意思是用于“集成电路之间”的通信总线,简写:IIC(或者I2C)0应答信号表示继续接收数据i2c传输的要点就是:传输一个字节 后面必然紧跟一个"响应"信号----应答信号.这个响应信号可能来自主机,或者是从机,具体是谁,就要看传输方向。
2024-03-11 23:37:20
798
原创 平台总线--ID匹配和设备树匹配
id匹配(可想象成八字匹配):一个驱动可以对应多个设备 ------优先级次低注意事项:device模块中,id的name成员必须与struct platform_device中的name成员内容一致,因此device模块中,struct platform_device中的name成员必须指定driver模块中,struct platform_driver成员driver的name成员必须指定,但与device模块中name可以不相同/*platform device框架*/。
2024-03-08 23:01:26
885
1
原创 驱动高级--mknod
仅devfs,导致开发不方便以及一些功能难以支持:热插拔不支持一些针对所有设备的统一操作(如电源管理)不能自动mknod用户查看不了设备信息设备信息硬编码,导致驱动代码通用性差,即没有分离设备和驱动。
2024-03-01 22:18:29
688
原创 中断驱动
一种硬件上的通知机制,用来通知CPU发生了某种需要立即处理的事件分为:内部中断 CPU执行程序的过程中,发生的一些硬件出错、运算出错事件(如分母为0、溢出等等),不可屏蔽外部中断外设发生某种情况,通过一个引脚的高、低电平变化来通知CPU (如外设产生了数据、某种处理完毕等等)
2024-02-29 23:15:55
688
原创 led驱动设备树
减少垃圾代码减轻驱动开发工作量驱动代码和设备信息分离参考Open Fireware设计用来记录硬件平台中各种硬件设备的属性信息。
2024-02-23 22:31:11
779
原创 内核驱动中级,驱动led
内核将物理内存等分成N块4KB,称之为一页,每页都用一个struct page来表示,采用伙伴关系算法维护共4G的虚拟内存,用户空间用1-3G,内核空间用3-4G内核地址空间划分图:3G~3G+896M:低端内存,直接映射 虚拟地址 = 3G + 物理地址.低端内存一定是连续的细分为:ZONE_DMA、ZONE_NORMAL分配方式:1. kmalloc:小内存分配,slab算法2. get_free_page:整页分配,2的n次方页,n最大为10大于3G+896M:高端内存。
2024-02-22 16:24:28
763
原创 时钟与定时器
硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒-tick),对应的中断处理程序就将全局变量jiffies_64加1jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量,程序中一般用jiffiesHZ:可配置的宏,表示1秒钟产生的时钟中断次数,一般设为100或200。
2024-01-23 19:24:27
392
原创 并发控制
执行流:有开始有结束总体顺序执行的一段代码 又称上下文应用编程:任务上下文 内核编程:任务上下文:五状态 可阻塞 a. 应用进程或线程运行在用户空间 b. 应用进程或线程运行在内核空间(通过调用syscall来间接使用内核空间) c. 内核线程始终在内核空间异常上下文:不可阻塞 中断上下文竞态:多任务并行执行时,如果在一个时刻同时操作同一个资源,会引起资源的错乱,这种错乱情形被称为竞态共享资源:可能会被多个任务同时使用的资源临界区:操作共享资源的代码段。
2024-01-22 12:54:11
892
原创 驱动开发--多路复用-信号
每个进程都有一个描述符数组,这个数组的下标为描述符,描述符的分类:文件描述符:设备文件、管道文件socket描述符。
2024-01-19 18:58:08
1635
原创 驱动开发--阻塞与非阻塞
阻塞: 不能操作就睡觉非阻塞:不能操作就返回错误多路复用:委托中介监控信号驱动:让内核如果能操作时发信号,在信号处理函数中操作异步IO:向内核注册操作请求,内核完成操作后发通知信号。
2024-01-18 00:36:21
616
原创 字符设备驱动框架解析
驱动实现设备操作函数 ----------- 做桩insmod调用的init函数主要作用 --------- 钉桩rmmod调用的exitt函数主要作用 --------- 拔桩应用层通过系统调用函数间接调用这些设备操作函数 ------- 用桩。
2024-01-11 20:18:05
837
原创 内核空间和用户空间
为了彻底解决一个应用程序出错不影响系统和其它app的运行,操作系统给每个app一个独立的假想的地址空间,这个假想的地址空间被称为虚拟地址空间(也叫逻辑地址),操作系统也占用其中固定的一部分,32位Linux的虚拟地址空间大小为4G,并将其划分两部分:0~3G 用户空间 :每个应用程序只能使用自己的这份虚拟地址空间3G~4G 内核空间:内核使用的虚拟地址空间,应用程序不能直接使用这份地址空间,但可以通过一些系统调用函数与其中的某些空间进行数据通信。
2023-12-06 23:02:00
131
原创 驱动模块--内核模块
内核模块宏都有什么,分别有什么作用?1.__init的作用: 展开后为:__attribute__((__section_(".init.text")))实际是gcc的一个特殊链接标记指示链接器将该函数放置在.init.text区段,在模块插入时方便内核从ko文件指定位置读取入口函数的指令到特定内存位置2.__exit的作用:展开后为:__attribute__ ((__section__ (".exit.text"))) 实际也是gcc的一个特殊链接标记,指示链接器将该函数放置在.ex
2023-12-05 23:06:10
215
原创 驱动开发--内核添加新功能
Ubuntu下这个文件为开发板ls命令的结果内核的内容:mm:内存管理fs:文件系统net:网络协议栈drivers:驱动设备arch与init:跟启动相关kernel与ipc:任务,进程相关。
2023-12-04 23:27:04
613
原创 操作系统背景知识
狭义的操作系统:给应用程序提供运行环境的裸机程序,也被称为操作系统内核广义的操作系统:一组软件集合,它包含:最核心的一个裸机程序 ----------内核 (kernel)app开发常用的一些功能库(如:C语言标准函数库、线程库、C++标准类库、QT类库等等)一些管理用的特殊app(如桌面、命令行、app包管理器、资源管理器、系统设置、一些常用后台服务程序)英文:Device Driver简称:驱动(Driver)
2023-11-30 23:25:37
103
原创 系统移植-根文件系统
根文件系统是内核启动后挂载的第一个文件系统系统引导程序会在根文件系统挂载后从中把一些基本的初始化脚本和服务等加载到内存中去运行。sbin 系统管理shell命令(elf格式)(通过busybox编译生成)bin shell命令(elf格式)(通过busybox编译生成)usr shell命令(elf格式)(通过busybox编译生成)lib 共享库(elf格式)(从交叉编译工具链中获取)dev 设备文件(内核启动后会将设备信息写入该目录)
2023-11-30 20:16:07
130
原创 Samsung下origen中uboot的配置与编译
此uboot为elf格式,只能运行在操作系统之上, 通过arm-linux-gnueabi-objcopy 生成uboot.bin文件。n 不具有通用性(不同的处理器、开发板uboot不可通用)Samsung下的origen配置与编译过程。2.指定编译uboot源码使用的编译器。n 支持丰富的处理器与开发板,易于移植。n 更新活跃、用户较多、资料丰富。n 支持丰富的用户命令。n 支持丰富的网络协议。n 支持丰富的文件系统。n 支持丰富的设备驱动。一.uboot的配置。1.uboot的编译。
2023-11-23 22:58:25
293
原创 Linux内核的安装
SD卡的存储以扇区为单位,每个扇区的大小为512Byte其中零扇区存储分区表(即分区信息),后续的扇区可自行分区和格式化;若选择SD卡启动,处理器上电后从第一个扇区开始将其中的内容搬移到内存,所以我们把uboot放到从第一个扇区开始之后的空间, 之后的空间根据个人需求可进行分区和格式化。
2023-11-20 23:43:51
245
原创 系统移植-uboot
uboot概述:操作系统运行之前运行的一小段代码,用于将软硬件环境初始化到一个合适的状态,为操作系统的加载和运行做准备(其本身不是操作系统)1.初始化软硬件环境2.引导加载linux内核3. 给linux内核传参4. 执行用户命令uboot环境变量。
2023-11-19 23:51:02
133
原创 指针函数等
本质上是一个函数,返回值是这个类型的指针因为a的地址存放在fun函数中,程序结束后,地址释放,所以调用时为野指针。a为局部变量,注意生命周期解决办法1.使用static延长变量a的生命周期,2.地址传递宗旨:保证存放局部变量的地址不释放3.使用malloc主动申请堆区空间。
2023-11-04 00:18:19
145
原创 函数总结
/argc 统计命令行传参的个数//argv 保存命令行传的具体参数,每个参数当做字符串来存储,const是为了不让main函数修改argv数组里的内容。
2023-10-31 21:03:22
172
原创 C语言汇总
bin :bin是二进制(binary)英文缩写。/boot:存放的都是系统启动时要用到的程序。/dev:包含了所有Linux系统中使用的外部设备。/etc:存放了系统管理时要用到的各种配置文件和子目录。/lib:存放系统动态连接共享库的。/home:管理普通用户的主目录/root:根用户(超级用户)的主目录。
2023-10-24 23:45:28
289
原创 系统移植--前言
1.开发板上电后首先运行SOC内部iROM中固化的代码(BL0),这段代码先对基本的软硬件环境(时钟等...)进行初始化,然后再检测拨码开关位置获取启动方式,然后再将对应存储器中的uboot搬移到内存,然后跳转到uboot运行。2. uboot开始运行后首先对开发板上的软硬件环境做进一步初始化,然后将linux内核、设备树(dtb)、根文件系统(rootfs)从外部存储器(或网络)搬移到内存,然后跳转到linux运行。3.uboot浆dtb(device tree)从EMMC中搬到RAM内存中;
2023-10-11 23:53:44
115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人