- 博客(39)
- 资源 (2)
- 收藏
- 关注
原创 [Easy] leetcode-125 验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个。字母和数字都属于字母数字字符。
2025-01-21 22:11:10
252
原创 [Easy] leetcode-13 罗马数字转整数
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。给定一个罗马数字,将其转换成整数。,即为两个并列的 1。
2025-01-16 09:50:32
292
原创 Linux module参数传递
在echo时,就会调用mcq_mode_ops中的set回调,即param_set_mcq_mode()函数,在这里调用标准的 param_set_bool() 函数对参数进行设置,可以在这之前加入一些判断,类似的方法还有 param_set_uint() 等;在cat时,就会调用get回调,即param_get_bool()函数,获取参数值。例如,在上述示例中,use_mcq_mode是参数值,可以通过下面sysfs改变,从而使is_mcq_supported()的结果可以动态变化。
2024-05-30 17:02:23
581
1
原创 Linux 驱动&设备匹配过程
Linux内核需要兼容多个平台,不同平台的寄存器设计不同导致操作方法不同,故内核提出分层思想,抽象出与硬件无关的软件层作为核心层来管理下层驱动,各厂商根据自己的硬件编写驱动代码作为硬件驱动层。,接下来分析内核驱动和设备匹配的流程,原理就是在注册到总线的时候,去获取对方的链表并根据规则检测,匹配后调用。这里提到的是虚拟总线,总线能将对应的设备和驱动进行匹配,可以用下面的命令查看不同总线类型。_register是传进来的__platform_driver_register。,也就是驱动的入口函数。
2024-05-29 18:23:25
2023
3
原创 leetcode-134 加油站
如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。你从其中的一个加油站出发,开始时油箱为空。你有一辆油箱容量无限的的汽车,从第。个加油站需要消耗汽油。
2024-05-20 19:28:22
169
原创 leetcode-151 翻转字符串里的单词
是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的。给你一个字符串 s ,请你反转字符串中 单词 的顺序。
2024-05-13 16:42:26
346
1
原创 [Easy] leetcode-136 只出现一次的数字
异或遵循结合律 a ^ b ^ c = a ^ (b ^ c),同一堆数,不管异或计算顺序如何变化,异或一定是相同结果。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。异或:当两个操作数的二进制表示形式的对应位不同时,结果为1,否则结果为0。给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。使用位运算的异或运算来解答。任何数和自身做异或运算,结果为 0。找出那个只出现了一次的元素。任何数和 0 做异或运算。
2024-05-13 15:29:26
229
原创 [Easy] leetcode-225/232 栈和队列的相互实现
仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。仅使用两个栈实现先入先出队列。
2024-05-11 10:55:35
308
原创 leetcode-49 字母异位词分组
互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,emplace_back() 接受构造新对象所需的参数,并在容器内直接构造新对象,避免了额外的拷贝或移动操作。push_back() 接受一个已构造的对象作为参数,该对象会被拷贝或移动到容器中。给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
2024-05-10 20:20:36
160
原创 [Easy] leetcode-35 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。利用二分查找可以更快的找到,只需要修改返回值即可,注意获取mid的计算方法考虑了溢出。注意到是按顺序排列的数组,那么按顺序遍历,如果找到,则跳出循环返回索引即可。如果找到最后还没找到,则返回数组长度索引值即为插入位置。
2024-05-09 18:10:33
329
原创 【Android】 镜像及分区
包含了用于启动过程的RAM磁盘的内容,RAM磁盘是一个临时的文件系统,在设备启动时,内核会将ramdisk.img中的内容加载到内存中,并将其挂载为根文件系统。ramdisk中包含了启动过程中所需的文件。存储引导镜像boot.img,包括了kernel和用于引导Android初始化的脚本。(2)fstab:文件系统表,定义各个设备的挂载方式和挂载点。(1)kernel:内核镜像(2)ramdisk。(3)sepolicy:SElinux策略文件。(1)init.rc:定义启动过程中的操作。
2024-04-16 19:34:53
1123
原创 【文件系统】 F2FS文件系统学习
F2FS(Flash Friendly File System)是专门为Nand Flash设计的一个日志型文件系统,于2012年12月合入Linux3.8内核,Google也在2018年(Android P)将其吸收到安卓原生版本中,使所有使用安卓的厂商受益。
2024-04-16 16:59:22
2621
5
原创 【内存管理】 proc/meminfo详解
通过vmalloc分配的内存都统计在/proc/meminfo的 VmallocUsed 值中,但是要注意这个值不止包括了分配的物理内存,还统计了VM_IOREMAP、VM_MAP等操作的值,譬如VM_IOREMAP是把IO地址映射到内核空间、并未消耗物理内存,所以我们要把它们排除在外。vmalloc和slab分配的内存都会被记录在meminfo中,但通过alloc_pages/__get_free_page分配的内存,没有在/proc/meminfo中统计,不知道有多少,就像个黑洞。
2024-04-09 18:34:34
2367
原创 Linux 中断处理
中断是一种由硬件设备产生的信号,不同设备产生的中断通过中断号来区分。CPU在接收到中断信号后,根据中断号执行对应的中断处理程序(Interrupt Service Routine)除了对时间敏感且保证不被其他中断打断的部分,剩余的任务考虑在下半部执行,下半部的实现机制有以下几种。上半部:在接收到中断后只完成有严格时限要求的工作,如对中断应答或者复位硬件,此时中断是被禁止的。下半部:指中断处理流程中推后执行的那一部分,在合适的时机执行,此时允许相应所有的中断。一般将中断处理分为上半部和下半部。
2024-04-09 13:23:47
1361
原创 Linux 内核同步
Linux 内核同步是指控制多个进程按照一定的规则或顺序访问某些系统资源的机制,下面是几个关键概念1、临界区和竞争条件a.临界区:访问和操作共享数据的代码段b.竞争条件:多个执行线程在一个临界区同时执行2、死锁:每个线程都在互相等待,但它们永远不会释放占用的资源a.自死锁:一个执行线程试图去获取一个自己已经持有的锁,它不得不等待锁释放,但因为它忙于等待这个锁,所以自己永远也不会有机会释放释放锁b.ABBA死锁:每个线程都持有一把其他进程需要得到的锁。
2024-04-06 18:03:48
685
原创 Linux 系统调用
在sys.c文件中添加下面函数\n");return 0;注:可以参照其他syscall写法,如果传递1个参数,就使用SYSCALL_DEFINE1,以此类推对于ARM架构,系统调用号文件位于注意:需要将__NR_syscalls 也同步增加。
2024-04-06 17:14:35
1189
原创 【ubuntu】增加swap容量
当在编译大型工程或者运行大型应用时,如果内存大小不足,就会失败,此时可以通过设置swap空间来缓解一下问题,一定程度上解决问题。swappiness是Linux内核的一个属性,其值代表了将运行内存数据交换到交换空间的策略,其值的范围为[0,100]
2024-04-03 17:24:30
1947
原创 【ubuntu】Vim配置记录
vim是一个高度可定制的文本编辑器,有许多丰富的功能,扩展性极强,用户可以通过多种方式来增强vimvim有非常多的优点,例如高效率的移动,可以不用鼠标,完全用键盘操作,占用系统资源较少,可以无压力的打开其他编辑器打不开的大文件,并且在输入方面也十分高效,插入、复制、删除都十分容易。
2024-04-03 16:41:32
735
原创 【进程调度】基本概念
不同任务对系统的重要性不同,如有些任务是用于控制负载均衡、管理调度功能的,因此其不应该被抢占,而像IDLE进程仅仅是当CPU上无运行任务时,用于管理CPU空闲状态的,故其不应该抢占其他进程,为了更好的满足这些任务调度需求,内核实现了不同策略的调度器类在Linux中调度器是以module方式提供的,在文档中可以查看设备默认调度器和切换调度器的方法# cat /sys/block/sda/queue/scheduler //查看支持的调度器,[]中是当前使用的。
2024-04-02 20:36:40
727
原创 【进程管理】创建进程
在Linux中,使用fork()函数创建进程,此函数主要开销就是复制父进程的页表, 特点是一次调用,两次返回使用man命令查看fork函数帮助从中可以看出,当创建失败时,会返回对应的errno,主要的两个原因是超过了线程数量限制和没有足够的内存空间。
2024-04-02 20:02:21
2227
原创 【进程管理】基本概念
进程:处于运行状态的程序及其用到的相关资源的总称,也就是任务(Task),是系统进行资源调度和分配的基本单位所有进程都是PID为1的 init 进程的后代内核启动的最后阶段启动 init 进程,解析initscript,初始化并执行其他相关程序,完成系统启动整个过程。
2024-03-29 17:58:54
675
原创 Linux 设备驱动概述
(2)块设备:可以按照任意顺序访问,以块为单位操作,如eMMC、UFS等,应用层可以通过类似dd命令对原始块设备/dev/block/sda16进行访问,也可以在块设备上建立文件系统以文件的形式访问。驱动即“驱动硬件设备行动”,设备驱动(Device Drivers)是连接软件和硬件的桥梁,负责软件与硬件的沟通,上层应用软件只需要调用其提供的API就可以使硬件完成工作。(1)字符设备:必须以串行顺序依次访问,不支持随机访问和任意长度的读写操作,如触摸屏、鼠标等。(2)完成设备轮询、中断、DMA通信等操作。
2024-03-28 17:10:08
384
1
原创 QEMU搭建ARM64+Linux环境
QEMU()是一套开源的虚拟机软件,可以模拟多个如x86、arm等处理器架构,用于虚拟化、仿真和调试,非常适合没有开发板而又想研究Linux内核结构和工作模式的人使用,对于嵌入式+Linux的学习十分有帮助本文也是参考了下方多篇博客,记录下自己在使用QEMU搭建环境时成功的步骤,便于后续的学习和实践。
2024-03-28 16:37:56
5470
5
原创 Proc 文件系统简介
一、Proc文件系统简介Proc file system是一种虚拟文件系统,其中的文件存储当前内核运行状态,用户可以通过proc文件系统中的文件对内核进行访问,和内核进行数据交互,如获取cpuinfo、meminfo、uptime等信息下图所示为即为 /proc/文件系统下的文件。二、二、Proc下常见文件介绍1、cmdline 内核启动参数2、cpuinfo 当前CPU的信息,各个CPU的型号,生产厂商和频率等3、crypto ...
2021-03-15 19:26:11
450
原创 ZYNQ库的添加以及SD卡读写需要的库
一、库的添加1.点击工程文件,右键,选择Properties2.选择 C/C++ Build ->Setting ->Libraries ->+号添加文件,输入m即可二、SD卡读写库的添加1.打开SDK->Xilinx Tools->Board Support Package Setting->双击bsp->勾选xliffs库2.这个库...
2019-07-08 09:32:38
696
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人