自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(155)
  • 资源 (51)
  • 收藏
  • 关注

原创 博客目录导读

如何创建设备文件如何编写字符设备驱动如何编写杂项设备驱动字符设备驱动接口最方便的字符设备驱动的写法软中断内核源码分析进程相关函数归纳驱动GPIO操作归纳驱动中定时器,taskle,工作队列编程驱动中断编程驱动中的资源共享和临界代码保护驱动等待队列,poll和select编程读操作系统导论记录linux下锁的历史发展tasklet内核源代码分析linux内存管理(一)-内存管理架构linux内存管理(二)-内存数据结构分析linux内存管理(三)-mmap的系统调用linux内

2022-11-19 17:35:33 1020 3

原创 驱动调试工具整理

zz驱动工具备注i2cI2c-toolsi2cdetect:检测挂在系统上的设备总线。i2cI2c-toolsi2cdump:查看寄存器的值i2cI2c-toolsi2cget:读取寄存器值i2cI2c-toolsi2cset:设置寄存器值spispi-tools网口驱动ethtool网口驱动Mii......

2020-12-23 11:16:21 3949 1

原创 arm架构Linux5.0内核连接脚本文件vmlinux.lds.S分析

vmlinux.lds.S 是 Linux 内核中用于链接的脚本文件,用于定义内核对象文件的内存布局,即它告诉链接器如何将不同的内核代码段和数据段组合成一个最终的内核映像 vmlinux。编译内核源码生成内核文件的过程分两步,一个是“编译”,另一个是“链接”的过程,vmlinux.lds.S要做的就是告诉编译器如何链接编译好的各个内核.o文件,从而生成vmlinux文件。

2024-04-23 17:23:51 563

原创 linux内存管理(十七)创建页表流程分析

固定映射是初始化在start_kernel()-> setup_arch()->early_fixmap_init()中,会初始化FIXMAP的起始地址,并建立一个映射框架,但不填充页表条目(PTE)。当然,还有很多函数也是通过__create_pgd_mapping来创建页表的,比如:create_mapping_noalloc、create_pgd_mapping、update_mapping_prot、map_entry_trampoline和arch_add_memory。

2024-04-19 11:14:40 555 1

原创 笨叔的eclipse使用步骤记录

5.选择C/C++ Attach下面的选项,第三步修改名字为lab,第四步选择刚刚创建的工程lab,第五步选择带调试信息的应用程序elf,第六步选择Disable auto build。6.第一步点击Dubger,第二步选择gdbserver,第三步骤写上gdb-multiarch。3.填写工程名字为lab,然后选择代码路径,最后点击finish。1.创建工程,打开file的New,选择peoject。2.选择c项目下的Makefile,然后点击next。8.在控制台带-s -S参数运行qemu程序。

2024-04-12 10:29:04 156

原创 看linux内核启动流程需要的arm汇编学习笔记(二)

0x30ldr x0, =my_label /*把宏的值加载到x0寄存器*/ldr x1, my_label /* PC值 + 宏的值,然后加载这个地址的值到x1寄存器*/

2024-04-09 15:13:07 601

原创 openssl加解密和签名验签步骤操作记录

这里,aes_key.bin 是你的 AES 密钥文件,encrypted_message.bin 是加密后的数据文件。这里,aes_key.bin 是你的 AES 密钥文件,encrypted_message.bin 是加密后的数据文件。此外,确保你的密钥安全存储,并且只在需要时才使用,以防止密钥泄露。这里,signature.bin 是签名文件,message.txt 是你想要签名的文件。-sha256 指定了使用的哈希算法,你可以根据需要选择其他哈希算法,如 -sha1 或 -sha512。

2024-01-23 23:15:36 1370 1

原创 arm64架构的linux中断分析(五)中断的使用

【代码】arm64架构的linux中断分析(五)中断的使用。

2024-01-11 10:09:13 467 1

原创 linux进程调度(四)-进程调度分析

不同的是,SCHED_RR会为每个进程分配固定的时间片,一旦时间片耗尽,当前进程便被置于队列的尾部,等待下一轮调度。task_tick_fair函数主要是遍历当前进程到当前进程到根任务组的每级公平调度实体,正常我们没有使用调度分组的话,只有一个调度实体,如果我们使用cgroup控制cpu的使用率,才会有多个调度实体,这些调度实体随着cgroup形成树状,我们只会往上遍历parent节点,针对每一个调度实体,我们会找到对应的cfs_rq后调用函数entity_tick更新进程的调度实体的状态;

2023-11-24 10:41:29 217

原创 linux进程调度(三)-进程终止

当进程退出的时候,根据父进程是否关注子进程退出事件,存在两种可能:第一种,父进程关注子进程的推出事件,那么进程退出时释放各种资源,只留下一个空的进程描述符,变成僵尸进程,发送信号 SIGCHLD通知父进程,父进程在查询进程终止的原因以后回收子进程的进程描述符。第二种,如果父进程不关注子进程退出事件,那么进程退出时释放各种资源,释放进程描述符,自动消失。进程的退出分两种情况:进程主动退出和被动退出。主动退出是指进程已经执行完毕,主动调用exit退出或者main函数执行完毕,编译器会总添加exit函数。

2023-11-24 10:41:10 222

原创 linux进程调度(二)-进程创建

我们可以直观看到kthread_run → kthread_create → kthread_create_on_node → __kthread_create_on_node的调用流程。到目前为止,我们无论是用户态的系统调用还是内核提供的函数,他们都是通过设置struct kernel_clone_args结构体为传入参数,然后调用kernel_clone函数来创建进程的。到这里我们又看到很熟悉的画面了,就是kernel_clone_args和kernel_clone函数。

2023-11-24 10:40:51 151

原创 linux进程调度(一)-进程概述

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态之间的转换等功能。现代操作系统支持多核处理器、多线程和分布式系统等技术,允许进程在不同的计算机上运行,进一步增强了进程的灵活性和可扩展性。在分时系统中,操作系统可以运行多个进程并为它们提供时间片,每个进程只有在它的时间片内获得CPU的控制权。目前,只有CPU的资源管理器能主动发起调度,而其他资源像内存,网络,显卡等资源管理器都是提供申请服务调度的,所以要必须理解我们常说的进程调度都是指调度CPU。

2023-11-24 10:40:37 64

原创 qumu调试linux内核rust驱动程序

把CONFIG_SAMPLE_RUST_PRINT和CONFIG_SAMPLE_RUST_MINIMAL选上。我们使用Rust-for-Linux的rust-dev分支进行学习。上下载 Images for arm64-virt 版本的压缩包。然后修改配置文件,把CONFIG_RUST设置为y。首先生成配置文件.config。

2023-11-09 20:36:21 625

原创 rust学习记录

换句话说就是,函数有一个引用参数的就有一个生命周期参数: fn foo

2023-10-24 14:45:06 81

原创 GIC寄存器详解

GIC(Generic Interrupt Controller)是由ARM公司推出的一种通用中断控制器,用于处理系统中的各种硬件中断。GIC是一种灵活、可扩展的、可编程的中断控制器,可以处理多种类型和来源的中断,并提供了一套完整的中断管理机制。CPU Interface control(CPU接口控制器):CPU接口负责处理CPU核心与中断控制器之间的交互,包括中断请求、中断确认、中断掩码、中断优先级等。CPU接口还支持可编程的中断延迟和预处理功能,以优化中断的响应时间和系统性能。

2023-09-25 15:06:22 737

原创 使用内核API函数找到I2C和串口控制器发送数据

我们一般操作I2C或者串口都是编写应用程序调用内核硬件提供的设备节点操作这些硬件的,但是在某个项目中,需要在shutdown的时候往i2c和tty发送数据,发送数据给外置的mcu,mcu几秒内就会给cpu断电,所以,这个动作无法在应用层中完成,需要在内核的reboot这个系统调用中实现了,但是在这个时候根文件系统已经umount了,无法使用call_usermodehelpere调用应用层的可执行程序了,会报找不到设备的错误。下面是4个例子:分别是I2C和串口的应用程序和内核程序。

2023-09-07 10:00:03 201

原创 arm64架构的linux中断分析(零)

前面的调用路径都好理解,就是start_kernel一直调用到 of_irq_init这个函数,我们的宏申明了__irqchip_of_table这个段,所以在 of_irq_init这个函数里面会遍历整个设备树,找到所有compatible匹配的节点,并且判断是否为interrupt-controller,是否有data成员,如果都有,则把date成员赋值给desc->irq_init_cb,最后调用desc->irq_init_cb。当异常发生的时候,处理器需要执行异常的处理程序。

2023-09-04 21:24:31 339

原创 warning: ignoring unsupported character ‘问题修复

细看报错内容,一致为解析Kconfig文件异常。查阅资料后发现,在Windows和Linux系统中,存在换行符的差异。windows下换行符为”0x0a0x0d”。Linux(Unix)系统下换行符为”0x0d”。

2023-09-04 21:23:06 839

原创 Ftrace

Ftrace有剖析器和跟踪器。剖析器提供统计摘要,如激素胡和直方图;而跟踪器提供每一个事件的细节。

2023-07-30 16:11:12 304

原创 eBPF学习记录(六)bpftrace常用例子记录

bpftrace -l” 列出所有探针,并且可以添加搜索项。?

2023-07-27 09:57:49 518

原创 Ubuntu22.04使用qemu运行armv8的TFA、optee和linux全过程

【代码】Ubuntu22.04使用qemu运行armv8的TFA、optee和linux全过程。

2023-07-06 20:53:32 398

原创 arm64架构的linux中断分析(四)

在Linux内核中,使用了类似中断控制器的模型,在每个中断控制器中管理多个中断,其中每个中断对应不同的中断处理程序,比如IOAPIC和APIC都是中断控制器的实现。当然,我们还要重点关注irq_generic_chip_ops结构体、irq_chip里面的方法和rockchip_irq_demux这个中断处理函数。中断控制器分为链式中断和层级中断,他们都是多个中断处理程序组成的中断处理链,链式中断适用于任务相对较简单、执行时间短的场景,而层级中断适用于需要更细粒度的控制和响应的场景。

2023-06-20 10:22:33 445

原创 arm64架构的linux中断分析(三)

irq_create_of_mapping函数首先根据irq_data的信息填充irq_fwspec结构体,然后调用函数irq_create_fwspec_mapping创建从fwspec到IRQ号的映射关系。of_irq_to_resource_table函数主要是遍历全部irq,然后调用of_irq_to_resource解析节点中的中断信息,和构造中断资源。translate和xlate都是中断控制器驱动注册的时候写好的,后面会详细说。

2023-06-20 10:22:17 504

原创 arm64架构的linux中断分析(二)

前面的调用路径都好理解,就是start_kernel一直调用到 of_irq_init这个函数,我们的宏申明了__irqchip_of_table这个段,所以在 of_irq_init这个函数里面会遍历整个设备树,找到所有compatible匹配的节点,并且判断是否为interrupt-controller,是否有data成员,如果都有,则把date成员赋值给desc->irq_init_cb,最后调用desc->irq_init_cb。它们是非可屏蔽中断(NMI),具有固定的优先级和中断号。

2023-06-20 10:22:02 1284

原创 arm64架构的linux中断分析(一)

第二组表示异常发生在ELn(n可以为1,2,3),处理异常的特权等级也是ELn(n可以为1,2,3),但是这里是linux内核,所以我们的特权为EL1,我们可以理解为异常发生在EL1,处理异常的特权等级也是EL1。软件中断号,有时候也叫虚拟中断号,是由内核定义的中断号,用于执行内核函数或服务。当触发流程走到cpu后,cpu会跳转到中断异常向量表,执行后面的操作:读取GIC信息,了解到是GPIO触发的中断,再读取GPIO控制器的信息,了解到是某一个GPIO的外设导致的,执行这个外设的中断处理函数。

2023-06-20 10:20:43 1547

原创 linux驱动-gpio

设备驱动层:定义了与硬件无关的GPIO API,包括GPIO的注册、卸载和控制等功能,而实现了某个模块的具体实现,比如led灯、按键等等。gpiolib抽象层:GPIO框架中的核心抽象层,它的作用是为设备驱动层和控制器层提供一致的接口,该层提供了包括上层设备驱动和下层控制器驱动的API接口。控制器层:GPIO控制器的实现和管理,在该层中实现特定GPIO控制器的底层硬件操作和功能实现包括GPIO控制器的初始化、操作和管理等。负责GPIO寄存器的读写操作和GPIO中断的处理等。

2023-05-10 19:54:45 2148 1

原创 linux内核启动分析(三)

如果不属于任何集群的话,就通过mpidr_cpu_id函数从mpidr中提取出该处理器对应的CPU核心ID,然后将该ID和该处理器的pgtable_hash_node结构体通过hash_add函数添加到wait_for_pgtable_refill哈希表中。首先,在for_each_possible_cpu循环中,遍历了所有可能存在的CPU核心,对于每个CPU核心,都使用per_cpu函数获取其cpu_data结构体,然后判断该处理器是否支持ARM64_HAS_CPUID功能。

2023-04-19 18:30:00 1429

原创 udev使用记录

赋值关键字包括:NAME(创建的设备文件名)、RUN(运行程序)、SYMLINK(符号创建链接名)、OWNER(设置设备的所有者)、GROUP(设置设备的组)、IMPORT(调用外部程序)、MODE(节点访问权限)等。在该目录,一般每个文件都代表某个系列的规则,比如声卡,网卡,usb等等的系列。匹配关键字包括:ACTION(行为)、KERNEL(匹配内核设备名)、BUS(匹配总线类型)、SUBSYSTEM(匹配子系统名)、ATTR(属性)等。在某HDMI声卡的规则,识别到声卡后,需要执行脚本设置音量。

2023-04-19 14:27:35 561

原创 内存-页表结构详细说明

我们知道linux采用了分页机制,通常采用四级页表,页全局目录(PGD),页上级目录(PUD),页中间目录(PMD),页表(PTE)。如下:_AC1

2023-04-18 19:05:19 1470

原创 linux安全-自主访问控制

在计算机安全领域,访问发起者被称为主体,访问动作就是具体的操作,被访问者被称为客体。比如,进程A 读文件 a,进程 A 是主体,读是操作,文件 a 是客体。Linux的主体只能是进程;操作只有读、写或者执行;客体可以是目录和文件{包括管道、设备、IPC(进程间通信)、socket(套接字)、key(密钥)}。备注:目录的执行是进入,文件的执行是运行,只有普通文件可以执行,管道等文件是不可以执行的。自主访问控制的自主是指使用计算机的人可以决定访问策略,比如规定某文件只能读不能写,制造出一种“只读”文件,防止

2023-03-30 17:24:22 1559

原创 linux内核启动分析(二)

set_task_stack_end_magic函数就做了一件事,获取内核栈的末尾地址,然后给这个地址赋值STACK_END_MAGIC。boot_cpu_init主要是设置当前cpu的状态,这些状态保存在全局变量__cpu_online_mask、__cpu_active_mask、__cpu_present_mask、__cpu_possible_mask中。因为启动阶段,ss->early_init为0,cgroup_init_subsys没有执行,先不看。不太能看懂,后续补,先学习一下。

2023-03-29 11:14:35 1005

原创 arm64虚拟化学习笔记

EL2控制virtual CPU interface,这包括打开和关闭virtual CPU interface,读写virtual CPU interface中的寄存器以实现vCPU的调度和上下文切换,配置maintenance中断,控制虚拟中断。ELn处理常规的物理中断,这包括打开和关闭PE的中断处理能力,ack中断,为PE维护一个中断优先级掩码(只响应更高优先级中断),定义中断抢占策略,执行中断降级。6.虚拟机被调度,虚拟机所在的CPU会获取这个VIRTUAL IRQ造成的中断异常。

2023-03-02 14:59:02 1495

原创 linux内核调用用户态程序的方法call_usermodehelpere

在用户态中,我们可以通过execve()直接执行应用程序;那么,在内核态,我们是否可以直接调用用户态程序呢?答案是可以的,内核提供了一个函数:call_usermodehelpere,它可以帮助我们在内核就可以执行用户态的二进制程序。准备好这两个文件,执行make就可以编译出b.ko驱动。

2023-02-28 16:23:41 1073

原创 看linux内核启动流程需要的arm汇编学习笔记(一)

MRS 指令: 对状态寄存器CPSR和SPSR进行读操作。MSR指令: 对状态寄存器CPSR和SPSR进行写操作。

2023-02-27 21:28:14 586

原创 linux内核启动分析(一)

最近工作中经常使用飞腾E2000的开发版,也遇到一些启动问题,所以追踪了一下linux内核启动流程。麒麟的代码我们看不了,但是我们可以直接看飞腾的开源内核代码,,我们使用的是5.10分支。飞腾E2000的开发版可以使用uboot和UEFI,无论是uboot还是UEFI加载linux内核,并且启动linux内核都是从arch/arm64/kernel/head.S文件的_head这里开始运行的。

2023-02-27 21:21:29 1123

原创 重写-linux内存管理-伙伴分配器(三)内存回收

申请分配页的时候,页分配器首先尝试使用低水线分配页。如果使用低水线分配失败,说明内存轻微不足,页分配器将会唤醒所有符合分配条件的内存节点的页回收线程,异步回收页,然后尝试使用最低水线分配页。如果分配失败,说明内存严重不足,页分配器将会进行内存碎片整理,整理后尝试使用最低水线分配页。如果分配失败,说明内存不够用了,需要回收一些暂时用不上的内存,页分配器将会直接回收页。后面才会oom等等。也就是说,存在内存异步回收和内存同步回收。

2023-02-20 14:36:09 694

原创 重写-linux内存管理-伙伴分配器(二)内存碎片整理

内存碎片整理( memory compaction ,直译为“内存压缩”,意译为“内存碎片整理”)的基本思想是:从内存区域的底部扫描已分配的可移动页,从内存区域的顶部扫描空闲页,把底部的可移动页移到顶部的空闲页,在底部形成连续的空闲页。完全同步模式的成本最高,轻量级同步模式的成本其次,异步模式的成本最低。在慢速路径的内存申请过程中,如果条件满足,第一次调用__alloc_pages_direct_compact是使用成本最低的异步模式。

2023-02-15 17:04:43 851

原创 重写-linux内存管理-伙伴分配器(一)

如果只申请一页,允许从这个区域分配页,返回true。zone_watermark_fast调用函数zone_page_state获取区域空闲物理页数量,如果是0阶,调用__zone_watermark_unusable_free计算不可用的空闲页,最后计算出可用的空闲页,然后判断如果可用空闲页数大于(水线 + 低端内存保留页数),说明内存足够,返回ture;zone_watermark_ok是调用zone_watermark_ok函数判断水位的,zone_watermark_ok函数我们前面讲过了。

2023-02-14 11:29:27 706

原创 重写-linux内存管理缺页异常分析(下)

触发匿名页的缺页异常的情况:然后看代码:do_anonymous_page首先判断一下匿名页是否是共享的,如果是共享的匿名映射,但是虚拟内存区域没有提供虚拟内存操作集合就返回错误;然后判断一下pte页表是否存在,如果直接页表不存在,那么分配页表;接下来判读缺页异常是由读操作触发的还是写操作触发的,如果是读操作触发的,生成特殊的页表项,映射到专用的零页,设置页表项后返回;如果是写操作触发的,需要初始化vma中的anon_vma_chain和anon_vma,分配物理页用于匿名映射,调用mk_pte函数生成

2023-02-07 16:45:01 920

原创 重写-linux内存管理-缺页异常分析(上)

从do_mem_abort追下来,大部分异常我们linux都是无法处理的,就直接把系统卡死。巨型页缺页匿名页缺页文件页缺页页在交换分区中也在其他内存节点中写时复制这些情况我们在下节中详细分析。

2023-02-06 12:34:24 1469

mymymyprintf.c

本文件是学习使用my_printf(const char *fmt, ...) 。const char *fmt 和 ... 是函数参数列表的一部分,通常用于格式化输出函数。 my_printf主要是使用myprintf处理字符串,把各种格式化的字符串处理好,放入一个字符串数组中。 它模仿了标准库中的 `printf` 函数的行为,但使用了自定义的输出缓冲区和内部处理逻辑。 整个文件展示了如何实现一个简单的格式化输出函数,它处理格式化字符串并输出到一个缓冲区,然后通过 `printf` 将结果打印到标准输出。这个实现不包括错误处理和一些 `printf` 的高级特性,但它提供了一个基本的格式化输出功能。

2024-04-17

load-monitor.zip

该文件是一个Linux内核模块的源代码,名为`load_monitor`,由Baoyou Xie开发,用于监控系统负载并在负载达到一定阈值时打印所有任务的堆栈跟踪。 该模块的主要功能是在系统负载较高时提供详细的堆栈跟踪信息,以便于开发者或系统管理员进行调试和性能分析。通过定期检查系统负载并打印堆栈跟踪,可以帮助识别系统性能瓶颈或潜在的问题。

2024-04-17

tcr-reader.zip

读取TCR寄存器的驱动代码例子,该文件是一个Linux内核模块的源代码文件,用于读取并打印ARM架构中的TCR_EL1寄存器的值。这个内核模块的目的是演示如何读取特定的CPU寄存器值,并在内核模块中打印出来。它遵循了Linux内核模块开发的常见模式,包括初始化和退出函数的定义,以及模块元数据的设置。

2024-04-17

WakeMeOnLan(远程唤醒开机)

【概括介绍】一个局域网唤醒工具【基本介绍】WakeMeOnLan是一个局域网唤醒工具,它能够扫描局域网中的电脑,通过网卡的唤醒功能,能够远程控制将其唤醒开机。界面易于管理。WakeMeOnLan还允许您的计算机上打开命令行,通过指定远程网络

2024-03-26

14. 预处理器.docx

这份文件是关于C语言预处理器的详细介绍,包括其工作原理、主要功能、GCC编译过程中预处理器的角色以及预处理指令的使用和规则。以下是文件的核心内容概要: 1. **预处理器工作原理**: 2. **GCC编译过程及常用选项**: 3. **预处理指令**: 4. **宏定义**: 5. **宏的通用属性和创建较长的宏**: 6. **预定义宏**: 7. **条件编译**: 8. **其他指令**: 这份文件为C语言开发者提供了预处理器的深入理解,包括其在编译过程中的角色、如何使用预处理指令以及宏定义的最佳实践。

2024-03-14

各头部企业嵌入式面经手册

这份文件是一份关于嵌入式面试经验的手册,它包含了多个头部企业嵌入式岗位的面试经历和问题。手册由小智学长和群内小伙伴共同整理收集,部分资源来源于网络。手册中提到,所有面试经验仅供参考,工程师应该注重学习行业知识,多实践,多尝试,算法与工程能力才是求职的最大利器。手册中详细记录了紫光展锐、华为、大疆、CVTE、博冠光电、西安诺瓦科技、海康威视、TP-LINK、海信集团、新华三、八维通科技、海能达、vivo、360、海尔、格力、格力、海能达、联发科、字节跳动、百度、蔚来汽车、锐捷网络、全志科技、乐鑫科技、小米、京东、星宸科技、元戎启行、晶晨半导体、TCL、复旦微电子、OPPO等公司的嵌入式开发岗位的面试问题和经验分享。面试内容涉及技术问题、项目经验、基础知识、操作系统、网络通信、数据结构与算法等多个方面。手册还提供了一些面试技巧,如准备作品(项目照片、论文等)和简历,以及在面试现场展示自己的项目和技能。同时,手册也提到了面试失败的总结,强调了实习经验、软件开发流程、性格测试、简历丰富度等方面的重要性。

2024-03-07

如何学习Linux下的GPIO

为什么要学习Linux下的GPIO GPIO是每一个嵌入式软件工程师都需要遇到的课题,我们在刚开始学习嵌入式的时候,都会遇到点亮一个LED的学习过程,而点亮LED就需要对GPIO进行操作,从单片机到嵌入式Linux系统,都离不开对GPIO的学习。 如果说一个程序猿的第一个程序是「Hello,World」,那对于一个嵌入式程序员来说,点亮一个LED就是他的第一行代码了,我现在还记得我第一次接触单片机,用汇编代码写出了流水灯的效果,虽然那个时候我对那些代码一知半解,但是现在想起来还是依然记忆犹新。

2024-03-05

Linux时间子系统.docx

这些文件主要讨论了Linux内核中的时间子系统,包括时钟源(clock source)、时间表示、时间维护者(timekeeper)、定时器引擎(clock_event_device)、低分辨率定时器、高精度定时器(HRTIMER)、动态时钟框架(CONFIG_NO_HZ、tickless)以及用户态定时器的实现方法。下面是对这些内容的简要概述: 时钟源(clock source): 时钟源为Linux内核提供时间基线,通常由硬件实现,如固定频率的计数器。 内核通过时钟源更新实时时间信息(墙上时间)。 时钟源的精度由其驱动时钟频率决定,内核使用clocksource结构来抽象时钟源。 时间表示: 内核使用不同的时间表示方法,如jiffies(基于时钟滴答的计数)、timeval(秒和微秒)、timespec(秒和纳秒)和ktime(通用时间架构)。 时间维护者(timekeeper): timekeeper结构用于组织与时间相关的数据,包括当前时间(xtime)、单调时间(monotonic time)、原始单调时间(raw monotonic time)和启动时间(boot

2024-01-27

eMMC-驱动架构分析

eMMC(Embedded MultiMedia Card)是一种嵌入式多媒体存储卡,为移动设备提供了更加便捷的外部存储解决方案。对于操作系统来说,eMMC驱动是负责控制eMMC存储设备的软件模块,实现操作系统文件系统与存储设备之间的交互。 eMMC驱动的架构分析包括以下几个方面: 1. 基础层 基础层是整个eMMC驱动的底层,实现底层硬件的操作。基础层又细分为硬件抽象层和底层驱动两个子层。 硬件抽象层负责将硬件操作抽象化,提供统一的API,屏蔽底层硬件的差异性。底层驱动则负责具体的硬件操作,如读写NAND Flash、片选、写命令等。 2. 存储协议层 存储协议层是eMMC驱动的核心层,主要实现上层文件系统与存储设备的交互。存储协议层包括逻辑层与传输层两个部分。 逻辑层主要负责把文件系统操作翻译成存储设备的操作,并将数据传输到传输层。逻辑层要实现对eMMC特殊命令的解析和执行,如写Firmware、写extcsd等。

2024-01-23

DIM-SUM操作系统内核开发的一系列问题及其解答

这份文件是关于DIM-SUM操作系统内核开发的一系列问题及其解答,涵盖了从内存管理、文件系统、中断处理到多核同步等多个方面。以下是各章节的核心内容概述。这些内容涵盖了操作系统内核开发的多个关键领域,包括内存管理、文件系统、中断处理、多核同步等,为开发者提供了深入理解和实践DIM-SUM操作系统内核开发的宝贵资源。

2024-01-11

EPCM3568B-LI系统的系统基本操作手册

这份PDF文件是关于EPCM3568B-LI系统的系统基本操作手册,主要内容包括: U盘和TF卡的使用介绍: EPCM3568B-LI有两个USB接口,一个是USB2.0,一个是USB3.0。 使用USB3.0接口挂载U盘时,需要短接OTG-ID跳线。 U盘和TF卡的挂载位置规则是/media/<username>/<partlabel>,对于EPCM3568B-LI系统是/media/zlg/<partlabel>。 系统默认支持fat、ntfs和ext等文件系统,其他文件系统可能需要额外驱动或内核配置。 网络设置: EPCM3568B-LI支持有线网络和Wi-Fi网卡设置。 有线网络配置包括临时生效和永久生效的方法,以及如何修改静态IP地址和动态IP地址。 Wi-Fi网卡设置包括STA模式(连接Wi-Fi热点)和AP模式(开启Wi-Fi热点)的配置方法。 有线网络配置: 有线网卡NET0和NET1的默认静态IP地址。 修改静态IP地址的临时和永久方法,以及如何配置动态IP地址。 Wi-Fi网卡设置: STA模式下,如何开启无线模块、扫描附近热点、连接热点。 AP模式下,

2024-01-11

Linux内核设备树介绍

设备树(Device Tree)是Linux内核中用于描述硬件平台和设备信息的数据结构。它与硬件平台的相关信息密切相关,并提供了一种统一的方式来描述各种硬件平台和设备。Linux内核设备树文档详细介绍了设备树的基本知识、使用方法、编写过程和调试方式等。对于开发人员来说,它提供了有用的参考和指导,帮助开发人员更好地理解和使用设备树技术。

2023-11-01

银河麒麟嵌⼊式操作系统安装教程

《银河麒麟嵌⼊式操作系统安装教程文档》是一份介绍如何在嵌入式系统中安装银河麒麟操作系统的文档。该文档的主要目的是提供一份详细的操作指南,以帮助开发人员在嵌入式系统中顺利地安装银河麒麟操作系统。 总之,《银河麒麟嵌⼊式操作系统安装教程文档》是一份有用的参考文档,它提供了详细的安装指南以及常见问题解答,有助于开发人员在嵌入式系统中安装银河麒麟操作系统。

2023-11-01

RISC-V的特权规范

RISC-V特权规范文档是一份详细介绍了RISC-V处理器体系结构中的特权模式的规范。该文档主要介绍了RISC-V处理器体系结构中的各种特权模式,包括机器模式、超级用户模式和用户模式等。 该文档是RISC-V处理器架构中的重要参考文献,它为CPU设计人员、操作系统开发人员和驱动程序开发人员等提供了必要的指导和参考信息。

2023-11-01

RISCV-伪指令列表

《RISCV_伪指令列表》是一份介绍了RISC-V指令集中伪指令的文档。该文档主要包含了RISC-V指令集中的伪指令及其使用方法,以帮助开发人员更好地理解和使用RISC-V指令集。它提供了对RISC-V指令集中伪指令的详细介绍和使用方法,有助于开发人员更好地理解和使用RISC-V指令集进行程序编程。

2023-11-01

swap的分析及其使用

本文档详细介绍了什么是Swap以及它的使用方法,Swap在操作系统中用于扩展系统内存,它会自动把系统内存中暂时不使用的页面转移到总之,提供了深入了解和使用Swap所需的所有信息,以便系统管理员和开发人员更好地管理和使用系统内存。硬盘上,释放出可用内存供其他程序使用。

2023-11-01

Linux内核页回收swappiness参数确切含义

Linux内核页回收swappiness参数确切含义

2023-11-01

ALSA中集成SPEEX降噪算法方法

ALSA中集成SPEEX降噪算法方法

2023-10-16

openeuler操作系统技术总览

openeuler操作系统技术总览

2023-08-17

裕泰微电子的YT8531S芯片使用说明

裕泰微电子的YT8531S芯片使用说明

2023-08-17

Armv8&amp;armv9架构入门指南

DEN0024A_v8_architecture_PG.pdf的翻译版本

2022-08-15

基于片上系统的radeon rs780显卡驱动设计

基于片上系统的radeon rs780显卡驱动设计

2022-07-07

让linux操作系统卡死的一个驱动源代码

在测试看门狗的时候,我们可以使用这种方法让系统卡死,无法喂狗,从而查看卡门狗工作是否正常。

2022-07-02

objtrace代码分析

objtrace代码分析

2022-06-15

linux使用gdb调试方法详解

linux使用gdb调试方法详解,包含 GDB 命令、在 GDB 里运行程序的例子,如何打断点和继续运行、查看堆栈信息、检查源文件,查看内存信息和各种数据

2022-04-27

gdb core分析方法

gdb core分析方法

2022-03-08

使用kgdb调试linux内核及内核模块

使用kgdb调试linux内核及内核模块

2022-03-06

老同学给的入门级驱动开发资料

1.交叉编译器 2.Tiny4412的基本介绍 3.烧写出厂程序 4.exynos4412的启动流程 5.uboot介绍和命令 6.linux内核 7.根文件系统 8.Linux模块 9.Linux字符设备驱动模型 10.Linux驱动接口 11.Linux的GPIO操作 12.Linux驱动中断编程 13.Linux驱动--等待队列&poll接口 14.Linux内核定时器、工作队列、tasklet 15.Linux字符设备驱动--原子操作、信号量 16.Linux字符设备驱动--平台驱动模型 17.LCD应用程序编程 18.LCD移植 19.LCD驱动 20.input子系统 21.IIC子系统 22.Linux 产品封装发布.pdf

2022-01-20

老同学给的入门级linux系统编程资料

0.linux软件安装 1.Linux系统命令 2.linux编辑、编译和调试及makefile 3.linux的shell基础语法 4.linux文件目录操作 5.linux多进程 6.linux进程间的通信 7.linux多线程 8.网络编程(socket编程) 9.系统编程的一个小程序(群聊系统)

2022-01-20

深入理解pci驱动程序.one

pci驱动程序

2021-09-24

perf火焰图生成与分析.pdf

perf的使用方法介绍

2021-09-09

Makefile实战.pdf

Makefile使用方法介绍

2021-09-09

CMake实战.pdf

cmkae使用方法介绍

2021-09-09

开源框架log4cpp和日志模块实现.pdf

开源框架log4cpp的环境搭建和使用方法介绍,可以实现日志模块

2021-09-09

Docker镜像编译与Docker-Compose部署与编排.pdf

docker使用环境搭建和docker使用方法介绍

2021-09-09

Ubuntu 16.04搭建Kubernetes集群环境 · 语雀.pdf

在Ubuntu 16.04搭建Kubernetes集群环境

2021-09-09

ventoy-1.0.39-linux.tar.gz

Ventoy制作ISO启动盘,制作好之后直接复制iso镜像到U盘即可,非常方便,随时更换镜像。

2021-07-21

poky.tar.gz

龙芯平台yocto工程

2021-07-08

RT-Thread学习笔记总结.tar.gz

RT-Thread学习入门文档

2021-07-08

嵌入式Linux(开发环境搭建+应用程序开发+系统移植开发).tar.gz

嵌入式linux入门文档

2021-07-08

空空如也

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

TA关注的人

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