自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 makefile

makefile项目管理模版

2025-03-31 20:41:11 316

原创 gdb调试

x /8d addr_val 显示addr_val起始的8个地址值,十进制方式显示。kill inferior num kill掉inferior,还可启动。remove-inferiors num 删除inferior,运行的不能删除。x /c addr_val 单字符串显示地址中的值。gdb 调试

2025-03-29 20:42:42 820

原创 mysql连接池

高并发情况下,大量TCP三次握手、MySQL Server连接认证、MySQL Server关闭连接回收资源和TCP四次挥手耗费显著,本项目主要用连接池的方式提高mysql的访问瓶颈.

2025-03-21 01:55:23 317

原创 C++理解(七)

单例模式:类创建多次对象,只得到一个对象(日志,数据库),构造私有化,定义唯一static对象,对外接口返回唯一实例对象,删除拷贝和赋值函数。detach函数将子线程与主线程分离,主线程结束后分离的子线程自动结束(不安全)类成员函数需lambda捕获this指针,在lambda内调用成员函数。类成员函数可bind(绑定成员函数和this)做为线程函数。类成员函数可使用静态成员函数或友元函数调用成员函数。类成员函数可外部外部普通函数传参调用成员函数。类实例化的对象函数可作为线程函数。

2025-03-16 18:46:36 370

原创 C++理解(六)

make_shared可通过参数列表传递参数给对象的构造函数std::shared_ptr<int> ptr = std::make_shared<int>(42)多线程访问共享资源时share_ptr定义资源,线程中传入weak_ptr提权访问资源,提权失败则资源被占用或释放,保证资源访问安全。make_shared对象不被引用时销毁,make_shared使控制块和对象分配在同一连续内存上,共享指针内存占用更少。指针指向临时对象,语句结束对象析构,指针指向的数据无法使用,编译不过。

2025-03-01 19:43:45 661

原创 c++理解(五)

vector和deque区别:vector底层是数组,deque是二位数组,首插deque是O(1),vector是O(n),中插和尾插均为O(1)//vbptr(虚基类表)+vfptr(虚函数表)reserve(n)预分配n个元素,不初始化元素,capacity变为n,size不变,n小于当前容量不做改变。有序关联容器(set,multiset,map,multimap)删查O(log2n)数组:增加删除O(n),查询O(n),随机访问O(1)链表:增加删除O(1),查询O(n),随机访问O(n)

2024-12-28 20:08:17 596

原创 c++理解(四)

静态绑定在编译时确定调用,调用效率高但灵活性低适用于非虚函数,函数重载,普通函数调用,动态绑定在运行时确定调用,调用效率低但灵活性高,适用于虚函数调用和多态。静态多态(编译):函数重载,模板(函数模板,类模板),动态多态(运行):基基类指针(引用)指向派生类对象通过该指针(引用)调用同名覆盖的虚函数。析构函数不为虚函数(动态绑定),基类指针指向派生类时,析构函数静态绑定成基类析构函数,派生类开辟的内存由于不能调用派生类析构函数而泄漏内存。继承需要交基类大小,虚继承的派生类也有vptr。

2024-12-22 19:32:26 627

原创 c++理解(三)

malloc开辟内存失败返回nullptr,new(malloc实现)抛出bad_alloc异常。对象在new开辟内存时会多开辟4字节来存储对象个数,使用delete []时才可正确调用析构函数。delete(free实现)先调析构函数再free,无析构函数delete和free相同。除了对象的其他类型变量的数组和单个变量可混用delete/delete []allocator(空间配置器):内存开辟释放,对象构造析构。对象池:短时间内多次使用用一块内存(new/delete)

2024-12-17 22:15:00 263

原创 c++理解(二)

无默认构造函数的类类型(类属性包含其他类,子类初始化父类成员)const成员方法产生const this指针。对象大小和成员变量有关(同struct大小)初始化列表初始化参数的顺序为类中参数定义顺序。const常量成员只能初始化不能赋值。引用类型在定义时初始化且不能重新赋值。初始化列表初始化参数的顺序为类中参数定义顺序。static成员方法不产生this指针。只读成员方法实现为const方法。普通成员方法产生this指针。对象大小和成员变量有关(同struct大小)

2024-12-10 21:36:35 200

原创 c++理解(一)

函数定义形参时从左向右依次赋值且不能跳跃fun(int a = 1, int b, int c = 2)不符合要求,fun(int a, int b, int c = 2)符合要求。),初始化为变量为常变量(const int a = b;const右边无,const不属于类型,const int*

2024-12-08 21:15:49 688

原创 c->c++(四):gtest

gtest安装,TEST/TEST_F,断言宏,事件机制,程序退出/崩溃

2024-08-05 20:02:00 325

原创 c->c++(三):stl

begin()返回首元素迭代器,end()返回尾元素迭代器,rbegin()返回尾元素逆向迭代器,rend()返回首元素逆向迭代器,cbegin()同begin(),cend()同end(),crbegin()同rbegin(),crend()同rend(),增加了 const 属性。copy(first,last,f)/copy_if(first,last,f,fun)复制范围[first, last)中的元素到从f开始的另一范围,返回目标最后下一个元素输出迭代器。模版,容器,泛型算法,特化萃取,智能指针

2024-07-31 22:06:53 867

原创 c->c++(二):class

抽象基类(接口)指针指向派生类(new派生类对象:person *p = new man;),抽象基类(接口)析构函数是否为虚,都能正常调用派生类析构函数,一般抽象基类(接口)的析构函数都定义为虚。派生类覆盖基类同名成员(重定义),父类的同名成员存在且被隐藏,可通过全域路径调用被隐藏的方法,可添加派生类独有成员。静态类:内部全是静态成员,不能被实例化,不包括构造函数,不能实现接口(不能被继承),不能有实例成员。C多继承A和B,A和B有同名成员、菱形继承(B1:A, B2:A, C:B1,B2)造成二义性。

2024-07-03 16:23:09 1209

原创 c->c++(一):部分KeyWord

显示类型转换:基本类型转换,指针类型转换(空针->目标类型空针),函数类型转换(任意类型函数->void),父类和子类之间指针和引用转换(上行转换安全,下行转换不安全),不能转换掉exdivssion的const、volitale、__unaligned。char8_t(20),char16_t(11起),char32_t(11):指定占用字节数且是无符号,字符串类u8string,u16string,u32string(20)(指针变量const化)

2024-06-14 22:08:35 789

原创 队列和二叉树

队列队列结构:队头指针指向队头元素,队尾指针指向队尾元素(链表形式或数组形式)队列特特点:先进先出,对头插入,队尾出队双端队列:对头队尾都可插入和出队二叉树二叉树:包含根节点和子节点,一个三角组内只有一个根节点,最多有两个子节点,也可无子节点,子节点和根节点存在某种关系二叉树一般用链式存储包含两个子节点指针(左右),根结点指针和父节点指针完全二叉树:从根结点起从上往下、从左往右依次存储

2024-05-10 00:04:45 255

原创 git和github

git指令git基础操作Linux安装git

2024-04-16 00:34:22 400 1

原创 图片解码显示

本文主要探讨基于s5pv210实现图片解码显示项目。项目概述:硬件:s5pv210(已移植uboot,kernel,busybox,已搭建tftp,已挂在ntfs)软件:ubuntu14(已搭建tftp,搭建ntfs) 项目功能:基于s5pv210实现对bmp,jpeg,png三种图片的解析和显示,并且支持点击触摸屏两侧实现图片翻页 项目文件架构:(文件具体功能可阅读RADEME(后面)) png库移植 jpeg库移植 zlib库移植

2024-02-05 19:48:03 600

原创 linux驱动(八):block,net

块设备驱动:设备I/O操作,向块设备发出请求(request结构体描述),请求速度很慢,内核提供队列机制把I/O请求添加到队列中,提交请求前内核会先执行请求合并和排序以提高访问的效率,I/O调度程序子系统提交I/O请求,挂起块I/O 请求,决定队列请求顺序和派发请求到设备。块设备单位:扇区(Sectors):1扇区为512(倍)字节,块(Blocks):1块包含1个或多个扇区,段(Segments):若干相邻块组成,页(Page):内核内存映射管理基本单位。block_device:块设备实例。

2024-01-21 20:36:58 617

原创 linux(七):I2C(touch screen)

遍历 __i2c_board_list上的i2c_devinfo结构体,比较i2c_devinfo->busnum与适配的编号,匹配则调用i2c_new_device注册。i2c_match_id通过设备与设备驱动名字和i2c_device_id依次匹配,总线层的probe为设备client层的probe。I2C总线驱动:I2C适配器(I2C控制器)控制,用于I2C读写时序(I2C_adapter、i2c_algorithm)挂接与i2c_driver匹配成功的i2c_client(设备)

2024-01-20 19:12:55 1106

原创 linux驱动(六):input(key)

核心层:连接设备驱动层和事件处理层,为设备驱动层提供输入设备驱动接口(struct input_dev)以及输入设备驱动注册函数(input_register_device),为事件处理层提供输入事件驱动接口,通知事件处理层对事件处理。将要注册input_dev驱动设备放在input_dev_list链表中,调用input_attach_handler函数,将每个input_handle的id_table进连接接。input_table为input_register_handler函数注册时填充。

2024-01-17 21:18:48 1114

原创 linux驱动(五):framebuffer

struct s3c_platform_fb:结构体变量是platform设备私有数据(platform_device.device.platform_data)数组指针的每个成员对应一个fb_info结构体指针(每个设备的描述信息,#define FB_MAX 32),数组下标对应次设备号。显存和可见可视区域偏移量。

2024-01-14 14:44:36 1253

原创 linux驱动(四):platform

match为设备和驱动匹配函数,uevent内核向用户通知事件,probe探测函数,remove移除函数,shutdown关闭函数,suspend挂起,resume唤醒,struct dev_pm_ops *pm;name总线名称,struct bus_attribute,struct device_attribute,struct driver_attribut为总线,设备,驱动属性和方法。minor次设备号,name设备名,fops设备操作函数,this_device当前设备指针。

2024-01-10 00:32:53 1037

原创 linux驱动(三):gpiolib

leds_init中创建了leds类(/sys/class/leds),led_class_attrs数组内容为/sys/class/leds/目录里的文件,该文件为内核向应用层提供的操作接口(类似设备文件)写方法:void (*brightness_set)(struct led_classdev *led_cdev,enum led_brightness brightness);

2024-01-07 18:34:44 1155

原创 linux驱动(二):led补

udev机制流程:kernel(class_create,class_destroy,device_create,device_destroy)-->udev(mdev,应用层)-->/sys/class/设备类/设备。驱动主次设备注册和取消,udev(mdev)机制,静态和动态映射操作寄存器。动态映射结构体方式操作寄存器 ,内核寄存器读写接口

2024-01-03 01:07:16 810

原创 linux驱动(一):led

printk为内核中包含打印级别的功能的函数,/proc/sys/kernel/printk可查看当前系统的打印级别,高于打印级别未打印出的信息用dmesg查看。__init是宏定义,__init将修饰函数放入.init.text段,内核启动时加载.init.text段模块函数初始化。major为设备驱动编号,为0则为自动分配,其他为静态注册(/proc/devices可查看驱动编号)字符设备软件是以字节为单位进行操作的,块设备,块设备是以块(多字节)为单位操作,网络设备为网卡驱动。

2023-12-31 22:13:08 1060

原创 linux系统和网络(四):网络

编写client和server,server用于存储个人信息,client下发个人信息增删改查等信息到server,server执行并反馈结果。参考本博客其他文章:基础网络知识,socket网络编程,基于socket的聊天室和简易ftp。NAT是局域网主机发送数据包给外网将主机内网IP转换为外网IP。DNS实现域名和IP地址之间转换。网段 = IP地址 & 子网掩码。路由器是局域网和外部网络通信出入口。

2023-12-25 22:42:29 489

原创 linux系统和网络(三):IO,信号,信号量,线程

sigaction可设置新捕获函数和获取旧的捕获函数,signal须在新捕获函数中获取旧捕获函数。select和poll(多路复用IO):外部阻塞式,内部非阻塞式自动轮询多路阻塞式IO。内核挂起,进程暂停运行,交出CPU给其他进程(阻塞住),需被信号唤醒。存储映射IO(mmap):共享内存,提高效率(LCD显示和IPC间共享内存)进程:CPU时分复用,实现多任务系统需求,进程间切换开销大,通信效率低。阻塞IO:wait、pause、sleep、read、write等。线程创建,退出,回收,分离,id。

2023-12-24 15:18:53 498

原创 linux系统和网络(二):进程和系统时间

linux系统记录时间:内核开机启动读取RTC硬件获取初始基准时间,存储该基准时间对应jiffies值,系统运行每节拍,jiffies加1,根据jiffies加UTC(1970-01-01 00:00:00 +0000)可获得时间点,RTC在关机后记录节拍,用于开机后的点时间准确。fork前为父进程空间,子进程继承父进程的资源(fork前),pid=0为子进程空间,pid>0为父进程空间,其余为公共空间,子进程继承父进程fd(覆盖写),父子有独立的pcb。

2023-12-22 22:18:41 1054

原创 linux系统和网络(一):文件IO

文件描述符是数字,打开文件时,系统在内存中构建数据结构来表示动态文件并返回数字作为文件描述符,该数字和动态文件数据结构挂钩绑定,API对描述符操作可实现对文件操作。文件存在块设备中为静态文件,open打开文件,内核在进程中建立打开文件的数据结构在内存中用于记录文件的文件参数,开辟一段内存用于存放内容,将静态文件转为动态文件。重复打开同一文件,多个fd数值不同且有各自的文件指针,但表示同一文件,用这些fd同时对文件写入,后一个写入会覆盖前一个,加O_APPEND可解决覆盖。

2023-12-18 23:28:53 1149

原创 根文件系统(二):busybox

parse_inittab(init.c)函数解析/etc/inittab再执行sysinit,wait,once后死循环执行respwan和askfirst。PATH定义程序路径,export导出为环境变量,默认为/bin /sbin /usr/bin /usr/sbin。用户登录在inittab执行/bin/sh生成shell界面,故添加/bin/login或/sbin/gettty登录功能。挂载根文件系统/linuxrc成功,找不到/etc/init.d/rcS和/dev/tty2等文件。

2023-12-16 16:16:00 952

原创 根文件系统(一):基础

VFS是虚拟文件系统(FAT、NTFS、ext2、ext3、jffs2、yaffs2、ubi)用于管理块设备,通过文件系统将对扇区的访问变成对目录和文件名的访问且提供访问和操作文件的API,且同一API可适用于对不同格式的文件的操作。存储设备(flash等)是分块(扇区),访问存储设备是按块号 (扇区号)来访问,文件系统(软件)对存储设备扇区进行管理,将对扇区的访问变成对目录和文件名的访问。根文件系统init进程的应用程序和其他应用程序,提供根目录、etc、bin等目录以及shell命令。

2023-12-15 22:59:12 413

原创 kernel(三):kernel移植

每个mach-xxx.c文件定义一个机器码machine_desc结构体变量且结构体变量被定义到段(.arch.info.init)修改网卡地址和中断号(arch/arm/plat-s5p/devs.c)程序在dev_driver_string或max8698_pmic_probe异常。选择配置文件smdkv210_android_defconfig(arch/arm/configs)修改网卡寄存器配置(移植mach-x210.c)led亮且未显示解压zImage信息则解压部分异常(实际为物理地址错误)

2023-12-14 01:07:17 458

原创 kernel(二):启动内核

kernel建立页表:kernel先建立段式页表(同uboot建立页相同页,大小为1MB,1MB映射4GB需4096页表项,每个页表项4字节,共需16KB做页表),建立细页表(细页表项大小为4kb)uboot启动内核(theKernel(0,machid,bd->bi_boot_params))运行时把0写入r0,machid写入r1,bd->bi_boot_params写入r2。其他备用init进程:/sbin/init,/etc/init,sbin/init,/bin/sh。

2023-12-12 20:31:51 1031

原创 Kernel(一):基础

网卡DM9000:Kconfig(.config中CONFIG_ARM=y ==> depends on ARM || BLACKFIN || MIPS)==>menuconfig(DM9000 support:Y、N、M)==>.config(CONFIG_DM9000=y)==>(obj-$(CONFIG_DM9000) += dm9000.o)menuconfig和Kconfig:Kconfig为menuconfig菜单内容,修改Kconfig可修改(增删改)menuconfig菜单内容。

2023-12-10 16:07:39 1073

原创 U-boot(八):官方uboot移植

(crt0.S设置栈,调用board_init_f函数进行板级初始化(arch/arm/lib/board.c)make s5p_goni_config调用mkconfig脚本传参(-A,s5p_goni)cpu_init_crit函数成功初始化串口、时钟后进入_main(arch/arm/lib/crt0.S)默认使用board_eth_init,cpu_eth_init两函数初始化网卡,故套壳函数初始化网卡。二阶段start_armboot:board_init_f和board_init_r。

2023-12-07 01:54:38 864

原创 U-boot(七):U-boot移植

网卡芯片CS引脚(片选信号),210每个SROM bank对应选信号CSn(n=0-5),210的DM9000接在CSn1(SROM bank1),DM9000总线地址基地址是0x88000000。210的SROM控制器是8/16bit接口,实际使用16位接口,网线有8根,4根都是GND,发送2根(Tx-,Tx+),接收2根(Rx+,Rx-)DM9000的CMD引脚接210的ADDR2引脚,数据线和地址线复用,CMD为高电平传输DATA,低电平传输INDEX(偏移地址)

2023-11-30 03:02:16 1023

原创 U-boot(六):命令体系,环境变量,iNand/SD卡驱动

default_environment初始化环境变量(默认),二阶段SD卡的env分区crc校验通过,env_relocate读取SD卡环境变量覆盖default_environment,后面使用的都为SD卡环境变量。uboot二阶段初始化完成进入main_loop循环,main_loop执行一次为一条命令的获取,解析,执行(run_command)的过程。uboot每个命令对应cmd_tbl_t结构体的一个实例,输入命令结构体实例中查找对应的结构体,找到后调用命令函数执行命令。

2023-11-28 21:32:19 1108

原创 U-boot(五):启动内核

LINUX_ZIMAGE_MAGIC是魔数(0x016f2818)来表示zImage,即zImage格式镜像在头部存放该数作为标记辨别它是否是zImage(是否等于LINUX_ZIMAGE_MAGIC),若为在Image则对头部信息改造,用头信息初始化images,完成了校验。运行镜像过程:读取头信息MAGIC_NUM来确定镜像种类,镜像校验,读取头信息获取镜像信息(镜像长度,种类,入口地址),去entrypoint处运行镜像。

2023-11-26 15:25:28 1180

原创 U-boot(四):start_armboot

dm9000_pre_init函数为网卡初始化(GPIO和端口配置非驱动),gd->bd->bi_arch_number定义机器码,gd->bd->bi_boot_params为内核启动传递参数内存地址(0x30000100)dram_init在一阶段初始化low_level_init中初始化,此处为给全局变量定义赋值,记录DDR配置(gd->bd->bi_dram)gd_t中定义全局变量,其中bd_t结构体包含硬件参数(波特率,IP,mac,机器码,启动参数,环境变量,DDR,网卡)

2023-11-23 20:52:58 1482

原创 U-boot(三):start.S

转换表是虚拟地址映射的关键包含表索引和表项,表索引对应虚拟地址,表项对应物理地址,表索引和表项构成转换表单元,可对内存块进行虚拟地址转换,转换表由转换表单元构成,每个单元对应1个内存块,整体对应整个内存空间(0-4G)的映射。构建异常向量表,启动介质选择,设置CPU为SVC模式,关看门狗,开发板供电置锁,时钟初始化,DDR初始化,串口初始化并打印"OK",重定位,建立映射表并开启MMU,清理bss,跳转到第二阶段。start.S uboot 一阶段

2023-11-20 22:27:05 215

空空如也

空空如也

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

TA关注的人

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