自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 eventfd和timerfd学习笔记

timerfd可用于用户态的定时器,定时操作。

2024-05-19 22:26:28 814

原创 ubuntu22上使用qemu-system-arm调试linux

qemu是用软件模拟硬件解析指令运行的软件,可以模拟arm、arm64、x86等,对于调试linux 内核机制很方便,不用额外购买开发板。由于linux上有对qemu的加速引擎,支持程度更高,且网络上教程居多,所以这里使用virtualbox+ubuntu22虚拟机,在ubuntu上运行qemu进行模拟。

2023-12-24 09:38:00 911

原创 btree学习笔记

btree:balance tree,平衡多叉树,类比avl:平衡二叉树,都是有平衡的属性 (多个子树高度一致),只不过是二叉和多叉的区别。

2023-09-10 10:39:32 387

原创 linux早期内存管理:memblock完全介绍

linux启动阶段,在伙伴系统初始化之前,也是需要动态内存分配的,比如dts、sparse_vmemmap、页表等,称早期内存管理,early mem manger。此阶段采用简单的内存管理器,有bootmem和memblock,bootmem是早期内核采用。4.x以后内核内核采用memblock,配置了NO_BOOTMEM宏。......

2022-07-31 16:52:16 1473 1

原创 FSM有限状态机golang实战

FSM有限状态机FSM:finite state machion,有限状态机。两种实现方式:简单switch case适用于简单的状态机int stateMachion(int event){ switch(curSate) { case sleeping: switch(event) { case hungary: eatIt(); curState = eating; ..

2022-03-26 17:51:54 1149 2

原创 UBI文件系统镜像制作

UBI文件系统镜像制作ubifs文件系统镜像分为制作分两步,分别是:1)mkfs.ubifs工具制作UBIFS文件系统镜像2)ubinize添加UBI卷信息mkfs.ubifs只是制作了UBIFS文件系统镜像,但其要能通过烧录器烧片,必须使用ubinize工具把UBI卷信息加上。mkfs.ubifs工具mkfs.ubifs命令用于制作ubifs文件系统,命令示例如下:mkfs.ubifs -x lzo -m 2KiB -e 124KiB -c 360 -o ./tmp_ubifs.img -d

2022-03-12 18:48:00 1743

原创 进程proc文件介绍

进程proc文件介绍proc/${pid}/下是每个进程的proc信息,/proc/self比较特殊,哪个进程打开,对应链接到哪个进程。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4q6coJfs-1645932312850)(E:\csdn_demo\进程proc文件系统介绍\进程proc文件.PNG)]内存相关:status: 进程使用虚拟内存和物理内存(RSS)信息statm:maps: 段内核映射VMA以及加载动态库信息;(映射分为文件映射和

2022-03-12 16:07:07 2931

原创 内核tty框架_串口_tty_shell的关系

串口驱动已s3c24xx为例,串口驱动主要提供ops,数据结构如下:在driver/tty/serial/samsung.c以三星s3cttypty虚拟tty。shellcmdlineconsole=ttySAC0;tty和串口驱动的绑定。串口驱动会注册tty设备?tty设备名,是串口驱动uart_driver中定义,uart_driver的dev_name中定义。nr值为后续的索引。如:如console=ttySAC0,CONFIG_SERIAL_SAMSUNG_UART

2022-01-15 18:16:06 1424

原创 linux内核poll函数学习使用源码mark

记录linux poll机制源码记录,基于linux2.4内核,在内核poll函数中使用poll_wait等待完成变量完成,然后在中断中唤醒完成变量。#include <linux/errno.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/modulep

2022-01-03 22:32:31 382

原创 python制作epub文件代码

python制作epub文件代码,已封装成类,可以直接使用。# encoding:utf-8# !/usr/bin/python3import zipfileimport os.pathcontainer_template = '''<?xml version="1.0" encoding="utf-8" standalone="no"?> <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:

2021-12-05 22:43:56 1288

原创 linux网桥实现代码走读

拓扑vlan_dev --> br-lan --> IP层 (br本身也会有一个fdb条目)网桥创建/添加节点模块初始化static int __init br_init(void){ int err; /*注册STP协议*/ err = stp_proto_register(&br_stp_proto); /*分配fdb的slab: "bridge_fdb_cache", 变量br_fdb_cache*/ err = br_fdb_init(); /*命名空间

2021-08-08 10:49:58 978

原创 前缀树学习和IP路由查找

概要前缀树,又叫字典树,trie树。是一种多叉树。用途单词补全/预测拼写检查9建输入IP路由查找(最长前缀匹配)数组中两个树最大异或值特点根节点是空字符每个节点所有子节点都不同根到叶子,路径上所有字符连接即使该节点对应的字符串[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-66WdAdSm-1627787560898)(E:\csdn_demo\算法\前缀树\前缀树图示.png)]存储数组形式用空间换时间,每个节点使用数组保存,

2021-08-01 11:13:43 955

原创 linux系统调用_arm实现深入剖析(上下文保存、参数传递)

前言这里我们不再赘述系统调用的基本原理以及系统调用产生时的函数调用以及系统调用表,直接看arm中的软中断产生及返回时如何保存寄存器上下文、如何陷入内核再返回、如何传参,模式切换做了哪些处理。这里mark一下: EABI和OABI系统调用实现的方式有所不同。陷入内核不同于x86的int 80中断,arm中使用软中断指令swi实现系统调用,直接看swi的处理向量vector_swi:/*=========================================================

2021-07-24 10:44:24 866 1

原创 golang微信小程序爬虫教程offer秀

背景周末帮女友手查的各大厂薪资情况,忙活了一个下午,真的是好无聊啊,所以决定写一个爬虫程序,自动爬取。图片offershow界面,以下采用秀代替offer秀因为本人本地开发环境是golang,所以还是采用golang,需求目标是爬取各大厂的薪资情况生成excel文档,用户可以输入筛选条件,如公司、学校、学历等信息,然后只输出筛选后的数据。抓包分析爬虫最重要的一步,抓包分析http请求包括头和相应报文内容,因为我们爬虫时就是需要构造http请求报文和解析响应报文。其次爬微信小程序和爬web网页没有

2021-07-18 09:17:36 1763

原创 socket源IP为INADDR_ANY,linux内核何时选择IP

1.通过bind看到原地址保存在inet_addr中2.tcp中connect操作,会设置通过ip_route_connect查路由操作选择srcip;3.udp没有绑定操作,一个socket可以给多个目的发包,不同目的使用的源ip也不一样

2021-05-01 18:39:32 1300

原创 01背包问题通俗讲解

问题知道每个物体重量和价值,给你一个背包,计算所能装走物体的最大价值。例如:背包容量:8kg;物体重量编号重量/kg价值023134245356为什么叫01背包问题答:因为每个物体都只有两种选择,装或者不装,称这种每个物体只有两种选择的问题称为01背包问题。解题思路每个物体只有两种选择,即装与不装背包的最大容量为,某个物体装和不装的这种情况中的所得容量最大值。装:总价值增加v,背包容量减少w;(假设该物体重w,价值v

2021-04-04 00:28:15 296

原创 linux软中断和系统调用深入研究

arm软中断模式arm7种模式有中断模式,但是并没有软中断模式。那么arm的软中断是什么呢?arm的软中断是arm从用户模式切换到特权模式,也就是linux中从用户态切换到内核态的过程。swi命令触发软中断linux系统中,swi异常向量代码:linux系统调用x86 架构是硬中断int 80,中断号为80来实现系统调用的;arm架构是使用swi命令,使arm切换为软中断模式,执行swi异常向量表中的异常向量。软中断的异常向量arm中异常象量表:异常类型偏移地址(低)偏移

2020-12-27 04:02:43 1932 2

原创 verilog 图像处理篇: 1.单通道提取

从camera出的像素格式为bayer格式,单通道提取,生成灰度图。GRBG4个通道都用某一通道的数据填充。算法实现,使用双端ram来实现该算法。由于bayer阵列,一个点的像素信息,在bayer阵列中占据两行。算法思路取一大小为2行阵列的dpram;每次写入2行数据,而读取时,只选则其中一行读取。且一行中的两个通道都读取同一地址的数据。代码实现//file name: gray.v//author: shugen.yin//date: 2017.10.18//func

2020-11-23 15:36:14 1106

原创 golang学习笔记

io.reader 提供了Reader方法的都是readerio.reader只是interface,如File类就是一个readertype定义类,具体类的方法不用在类中声明方法的指针传递,是修改内部属性用,如果是值传递则不会修改对象内部属性;其次指针传递减少copyduck typing,没有继承的概念golang 下载包命令go get github.com/chai2010/webp 与全局go path有关testbench设置文件名:XXX_test...

2020-11-23 12:29:19 277

原创 转载:linux 网络相关sysctl变量详解

Linux /proc/sys/net/ipv4/* 变量TCP变量:somaxconn - INTEGERlisten()的backlog参数的上限,在用户态为SOMAXCONN。默认是128。也可参考TCP socket调优的tcp_max_syn_backlog参数。tcp_abort_on_overflow - BOOLEAN如果监听服务太慢以致于不能接受新的连接了,就重置他们。默认值是FALSE。这意味着如果是因为一个burst而发生的溢出,连接可以恢复。只有在你非常确定的监听服务端接受

2020-11-20 14:12:59 394 1

原创 工作经验总结

工作两年了,趁着离职这天对这两年的嵌入式软件工程师的工作流程进行个复盘。开发流程1.设计得到一个需求后,先进行设计,切记不要一上来就投入到代码写作当中,这样只有返工和写出来的shi一样的代码。先设计,拿出几个解决方案,然后选择最优的一个。自顶向下设计,由整体到细节。选则好解决方案之后,将细节逻辑罗列出来,沥青其中的实现逻辑。2. 拿着逻辑图兑现代码注意,其中埋一些打印调试信息,为后续验证调试提供线索。未卜先知,比如函数传参的显示,指针的判断,空指针野指针,某一步骤出错,留下错误打印。未雨绸缪,

2020-11-13 12:18:13 168

原创 liblive555搭建rtsp服务器

1.使用demo 修改文件为fifo2. 修改reusefirstsource 当读完文件继续从头读3. fifo的设置,写端创建mkfifo,并且open时以读写非阻塞式打开。

2020-11-12 16:29:43 465

原创 小张学linux内核: 9. slab分配器

概述slab分配器,不是按页进行分配的,而是按字节来分配的。slab分配器向页框分配器也就是伙伴系统申请page,然后进行自己的管理,进行字节的分配,slab分配器为"打通铺"的分配思想。kmalloc,和内核的一些专有的数据结构就是slab分配器管理的。slab分配器最小的粒度是8字节,也只能分配8字节为倍数的内存,申请小于8字节也会按8字节进行分配。特征slab分配器,slab分配器,按照每一个字节大小,维持了3个列表,即满,半满,空的page链表,分配的优先级是先从半满的链表分配,然后是空,如果

2020-10-25 01:16:15 219

原创 小张学linux内核: 写时复制COW和malloc的实现

写时复制。https://www.oschina.net/question/234345_48023添加链接描述COW的页设置写保护,试图写写保护的页会进入。do_wp_page

2020-09-10 23:44:58 688

原创 C++ list的遍历删除问题用erase的返回,不要用迭代器++

删除时使用erase() 然后迭代器++ 会出segment fault;std::list<int> g_mylist;std::list<int>::iterator my_itr;for (my_itr = g_mylist.begin(); my_itr != g_mylist.end(); my_itr++){ g_mylist.erase(my_itr);}直接使用erase()返回的指针,erase()会返回下一个对象的指针。for (my_itr

2020-09-10 22:51:39 1660

原创 问题

解决一个旧问题又冒出一个新问题这就是你存在的意义新烦恼代替旧烦恼生活就是要解决这无数个烦恼抬头仰望星空在这宇宙里每个人都是多么的渺小躺在星空里鸟瞰这一片大地每个人又是这么的独一每个人都是如此渺小但又独一无二...

2020-09-10 21:10:41 67

原创 小张学linux内核:低速定时器和hrtimer

msleep低速定时器,最低精度一个tick,10ms。高速定时器hrtimer,nanosleep可到纳秒级。

2020-08-23 11:48:15 640

原创 题记

人们总是要我怎么样却不告诉我怎么做人海茫茫我不知去向或许这就是成长的烦恼总是要一个人去面对走出大山巨婴在海里飘荡小镇做题家也有小镇做题家的梦想不禁感叹人生要是像做题一样简单就好了每个人的人生都有意义自己的人生也只有自己能定义追求卓越者最后获得平凡甘于平凡的人最终变得平庸这性格无法改变或许才是这一切的根源但是改变总是伴随着痛苦老犬儒自我放逐新主义揭竿而起世界之钟在更替这个时代的节奏很快人的一生随之也过的很快日复一日的重复使人迅速的衰老唯有思考能抵抗这种衰老时

2020-08-22 03:23:03 220

原创 小张学linux内核:十四. elf文件的加载和进程切换寄存器的保存

重点关注虚拟内存的切换,pgd,mm_struct, start_code;理清楚这三个概念。

2020-08-19 19:05:27 312

原创 小张学linux内核: 调度子系统2实时调度类和睡眠唤醒的抢占

接着上节,带着问题继续研究调度子系统;1.实时进程的调度与抢占?2.sleep结束的线程怎么调度?3.信号唤醒的线程怎么调度?实时进程的调度与抢占重要的两个函数入队列和pick_next函数来研究。带着几个问题来研究。因为调度策略分sched_fifo和sched_RR,这两个调度策略能否共存,优先级如何?如果是sched_RR,那cfs的task还能获取到cpu吗?enqueue入就绪队列存储结构数组链表相比cfs调度类使用红黑树来存储调度实体,rt调度类使用数组链表来存储,每一个优先

2020-08-16 12:41:45 635

原创 uboot升级通过tftp烧写flash分区命令

在嵌入式开发过程中,我们需要将镜像文件烧写到flash的对应分区中。可以在uboot下通过tftp下载:步骤1.tftp命令下载文件到内存2. nand erase擦除flash分区3. 从内存烧写到flash将这些操作封装成uboot命令:要点:1 模拟mtdparts命令获取分区信息;2 tftp命令对应函数为tftpboot,下载的文件长度信息保存在变量。#include <common.h>#include <linux/mtd/mtd.h>#inclu

2020-08-14 23:13:03 1262 1

原创 小张学linux内核驱动篇:5.mtd驱动框架

nandflash命令cmd是通用的分层分离:设备层原始设备层mtdcore.c硬件驱动层 /mtd/nand/下nand_base.c nand通用接口;分rawnand;onenand,spinand;只是接口不同而已指令解析系统都是一样的。raw nand驱动字符设备接口来看字符设备访问nandflash的流程图:...

2020-08-09 19:57:30 1176

原创 随笔misc:动态库中的符号执行时找不到解决方法

有时候我们重新编译动态库时,有新加的符号在执行时找不到;但是在编译时连接可执行程序明明已经链接了该符号所在的文件,这是因为在之前链接的时候,该符号没有被用到,在编译后使用strip操作将该符号移除了,解决办法:重新链接该动态库,生成可执行程序;编译可执行程序时,去掉strip操作,防止发生此类问题。注:strip操作可以去掉可执行程序的符号表,即没有用到的一些内部符号(静态链接的符号)。...

2020-08-09 07:00:10 857

原创 小张学linux内核:十三.vfork+exec的内核实现

vfork是为了exec而生,vfork不会拷贝父进程的内存空间,和父进程共用内存空间;当执行exec后,它就有了自己的独立的内存空间。针对vfork的两个特点,我们来追踪exec的实现。不copy_mm;–> exec是何时构建新的内存空间的?调用exec后父进程开始执行,exec如何实现?vfork等待task_struct–>vfork_done这个完成变量。调用过程如下带着这两个问题来阅读exec的源码。...

2020-08-01 11:57:15 417

原创 像OOM打印一样,查看各进程的内存信息,追踪内存泄漏

linux中当内存不够时,可能会触发OOM(out of mem),一般系统出现OOM,可能是系统中有进程存在内存泄漏。当系统出OOM时,会有各进程的内存信息和OOM评分,评分高的task_struct会被kill掉。为了追踪内存泄漏是哪个进程造成,需要像OOM的信息一样,从开机的时候的内存信息,和OOM时的内存信息作比较,差量最大的进程就很大可能是出内存泄漏。我们写一个KO,来给用户侧查看各进程的内存信息;提供proc文件task_meminfo,给用户cat。上代码:#include <l

2020-07-30 22:44:49 1170

原创 小张学linux内核:十一.进程和线程的创建过程

考试题。。。

2020-07-26 10:30:34 615

原创 随笔misc:给你的嵌入式linux串口设置登录密码

passwd设置密码passwd命令设置root密码,然后copy /etc/passwd中加密后的密码到rootfs,重新制作根文件系统。设置inittab设置/etc/inittab条目::respawn:/bin/login 启动脚本最后启动login程序/bin/login注意如果inittab中login加 -f root,则登录界面可以被control + c杀掉。::respawn:/bin/login -f root...

2020-07-23 22:51:45 876

原创 小张学算法之数据结构: 4.c语言用双向链表及内存池实现队列

加粗样式

2020-07-22 00:15:54 183

原创 小张学算法之音视频算法:2.jpeg图像压缩算法

接着上街视频压缩算法,今天来看看静态图像的压缩,相比视频压缩,图片压缩就太简单啦,let‘s go!!

2020-07-19 16:43:17 432

原创 小张学算法之数据结构:3.堆

此堆是数据结构中的堆,非我们程序中的堆栈段的堆。堆是一种完全二叉树,即非最后一层其他层全满的树。分最大堆和最小堆,最小堆,根节点大于孩子节点,左子树右子树也同样如此,是最小堆。看图看这红蓝配色,哈哈我是不会说我是巴萨球迷的哈哈哈。堆得插入十分简单:只需要在尾部插入,然后调整位置,和父节点比较,通过上浮交换操作,保持堆的特性。删除操作:只能删除根节点,然后孩子节点填充位置,段尾节点,填充空缺。由于是完全二叉树,可以使用数组来存储,根节点从1开始,2i是其左节点,2i+1是右节点,每次在尾部插

2020-07-18 10:58:10 138

空空如也

空空如也

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

TA关注的人

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