自定义博客皮肤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)
  • 资源 (30)
  • 收藏
  • 关注

原创 linux内核异常处理流程梳理

第二组表示异常发生在ELn(n可以为1,2,3),处理异常的特权等级也是ELn(n可以为1,2,3),但是这里是linux内核,所以我们的特权为EL1,我们可以理解为异常发生在EL1,处理异常的特权等级也是EL1。在linux这里就是说,第三组和第四组表示异常发生在EL0,但是异常处理却在EL1,而他们的区别就是,第三组表示异常发生在64位环境下,第四组表示异常发生在32位环境下。我们也看到第一组都是invalid的,是因为EL0发生了异常,不会在EL0处理,会陷入EL1处理,所以第一组也不需要实现。

2023-02-02 15:31:51 840

原创 linux内存管理(十六)-kmalloc函数解析

kmalloc_order就是真正进行页面分配的函数,首先flags加上__GFP_COMP标志,这样子就是使用了复合页,然后通过alloc_pages从伙伴系统中分配页面,如果分配成功,再调用page_address函数,把page结构体转化为虚拟地址,最后返回虚拟地址。如果比较小,则从slab管理器中分配内存。kmalloc_order_trace函数的作用是调用kmalloc_order进行真正的页面分配,然后在trace_kmalloc函数中使用tracer动态跟踪kmalloc。

2023-02-02 10:36:22 1257

原创 proc文件系统下各参数解析

proc全称是process information pseudo-filesystem,翻译过来就是进程信息伪文件系统。proc文件系统是一个伪文件系统,它提供了一个到内核数据结构的接口,一般挂载在/proc。proc文件系统中的大多数文件都是只读的,但有些文件是可写的,允许修改内核变量。在Ubuntu20.04,内核版本是5.15.0-56。我们可以看到proc文件系统下的文件和目录如下图所示:我们首先看到的是很多的数字,这些数字就是我们系统的每一个进程的信息,数字目录下面的文件的含义是一样的。我

2023-01-16 06:18:16 3435

原创 linux内存管理(十五)解析设备树中的内存信息过程分析

原来early_init_dt_mark_hotplug_memory_arch是通过memblock_isolate_range分离出对应的start_rgn和end_rgn,然后对[start_rgn,end_rgn]进行memblock_set_region_flags设置标志位。early_init_dt_scan_root也很简单,就是获取size-cells和address-cells信息,并且赋值给dt_root_size_cells 和dt_root_addr_cells而已。

2023-01-10 21:01:03 1592

原创 linux内核顺序锁的代码分析

顺序锁的特点使用方法也比较简单,只有read_deqretry可能有点疑问,就是读者退出临界区的时候会检测在读操作的过程中有没有写操作,如果有写操作则返回1,说明需要重新读,再跑一次循环吧;如果没有写操作,则返回0,说明不需要重新读,可以退出循环。

2023-01-07 23:25:20 509

原创 linux内核互斥锁的代码分析

自旋锁很好用,但是有个缺点,就是一直会占用cpu,直到获取锁。有时候我们不需要这样子,我们可以在锁被占用的时候把进程切换出去,直到锁被释放,我们再回来加锁,这样子才更符合我们实际应用。

2023-01-07 20:48:16 984

原创 linux内核读写自旋锁的代码分析

所以现在追一下linux内核读写自旋锁的代码。

2023-01-05 11:09:23 833

原创 linux内核自旋锁的代码分析

前面看操作系统导论这本书,其中锁的历史变化有点感悟,现在追一下linux内核锁的代码。

2023-01-04 17:16:46 1062

原创 iso文件系统转换成img格式的步骤整理

【代码】iso文件系统转换成img格式的步骤整理。

2022-12-16 15:18:18 5314

原创 读操作系统导论记录linux下锁的历史发展

如何评价一种锁实现的效果。为了评价锁是否能并工作得好,我们应该先设立一些标准。第一是锁是否能完成它的基本任务,即提供互斥。最基本的,锁是否有效,能够阻止多个线程进入临界区?第二是公平性。当锁可用时,是否每一个竞争线程有公平的机会抢到锁?是否会有这样子极端的情况:是否有竞争锁的线程会饿死,一直无法获得锁?第三是性能,具体来说,是使用锁之后增加的时间开销。有几种场景需要考虑。一种是没有竞争的情况,即只有一个线程抢锁、释放锁的开支如何?另外一种是一个CPU上多个线程竞争,性能如何?

2022-11-10 23:47:05 326

原创 vmlinux分析

未压缩的内核镜像生成过程:vmlinux —OBJCOPY—> arch/arm/boot/Image

2022-11-10 23:23:30 783

原创 linux文件的隐藏属性、特殊属性和ACL权限

使用命令lsattr命令可以显示文件的隐藏权限。

2022-11-09 10:04:26 2622

原创 麒麟操作系统使用dconf配置环境变量记录

最后还有一个问题,我们虽然使用上面的方法修改了dconf的配置,而且在设置页面也看到配置修改是ok的,但是系统实际配置没有生效。有时候我们需要修改默认配置,我们可以先去/usr/share/glib-2.0/schemas/目录找到对应的gschema.xml文件,找到文件后进行修改。我们的dconf默认配置是保存在/usr/share/glib-2.0/schemas/*.gschema.xml文件中,用户登录之后会把默认配置记录到。/.config/dconf/user文件。

2022-11-05 14:06:59 2273

原创 yocto的bitbake过程记录

我们使用yocto编译镜像的时候,第一步是要配置编译环境,第二步就是使用bitbake工具编译出我们需要的镜像。这里我们就来分析一下使用yocto进行bitbake的过程吧。现在我们尝试一下分析bitbake一个包和一个镜像的过程。使用的是NXP官方的imx8mp的yocto。,下载用户手册,根据用户手册搭建yocto环境,编译yocto。

2022-10-10 15:24:58 2942 6

原创 yocto使用记录

yocto使用记录

2022-09-06 17:20:42 1054

原创 ARMv8常用寄存器记录

AArch64执行状态提供了31个在任何时间任何特权级下都可访问的64位的通用寄存器。每个寄存器都有64位宽,它们通常被称为寄存器X0-X30。每个AArch64 64位通用寄存器(X0-X30)也具有32位(W0-W30)形式。每一个通用寄存器可以作为64位的通用寄存器,我们叫他们(X0-X30),也可以作为32位的通用寄存器(W0-W30)。如下图所示,每一个通用寄存器都是64位的。32位寄存器(W0-W30)取自相应的64位寄存器(X0-X30)的低32位。

2022-08-25 00:23:41 4527

原创 yocto添加包管理deb

yocto添加包管理deb。

2022-08-17 22:16:18 446

原创 麒麟操作系统的kdump环境搭建

kexec是一个快速启动机制,允许通过已运行的内核的上下文启动一个linux内核,不需要经过BIOS。实现kdump机制的关键,包括二个组成部分:一是内核空间的系统调用kexec_load,负责在生产内核启动时将捕获内核加载到指定的地址。二是用户空间的工具kexec-tools,将捕获内核的地址传递给生产内核,从而在系统崩溃的时候能够找到捕获内核的地址并运行。这是内核崩溃转储的本质。捕获内核会在生产内核崩溃时启动起来,与相应的 ramdisk 一起组建一个微环境,用以对生产内核下的内存进行收集和转存。...

2022-08-09 09:17:05 756

原创 ARM系统中9种中断响应步骤记录

看了贺贺老师的大系统中断的9种示例文档,理解整个ARM在安全和非安全模式中对各种中断的响应流程,cpu在不同执行环境(3种)来了不同中断(3种),cpu在这九种情况下中断响应流程的详细解析

2022-07-31 23:38:08 2592 4

原创 ubuntu修改控制台的名字

我们每一次打开一个新的控制台,他的名字都比较长,一般都是路劲,如果同时打开多个控制台,就不太容易区分哪个了,我们可以使用一下方法,可以很简单的给我们的控制台重命名

2022-07-25 21:49:50 541

原创 systemd开机启动和关机回调脚本

关机执行脚本:rtc_load.service把这个文件放到/lib/systemd/system/目录,然后使用以下命令创建几个软连接:

2022-07-04 11:14:36 4494

原创 dpdk环境搭建

一、首先我们需要准备一个物理机或者一个虚拟机。物理机:需要一个高性能的网卡跑dpdk和一个普通网卡进行网络通信,机器安装Ubuntu16.04.虚拟机:使用vnware安装Ubuntu16.04,配置一个多队列网卡和一个普通网卡。二、虚拟机配置如果使用物理机,我们不需要做任何配置,只需要安装Ubuntu16.04即可。如果没有物理机,我们就需要使用vmware安装Ubuntu 16.04,并且进行下面的配置。1.添加一个多队列网卡2.修改新增的网卡类型修改虚拟机所在的目录中的vmx文件。

2022-06-30 01:29:12 3086

原创 Ubuntu 环境搭建

yocto:sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm

2022-06-09 20:08:34 1018

原创 eBPF学习记录(五)linux内核源代码编译eBPF程序

linux 内核源代码编译bpftool的命令:make -C tools/bpf/bpftool编译ebpf程序命令问题记录:对于参数问题,当前 BPF 程序尝试把所有参数一次性放入,受限于栈最大长度 512,很容易出现被截断现象。以 BCC 程序为例的解决方法:遍历参数列表 argv 时,每个参数读取之后直接调用 perf_submit 提交至 ringbuf,而不是读取所有参数后仅提交一次,最后用户态程序负责把这些字符串拼接起来。这样可以做到参数最大个数不受限制,且每个参数长度可接近栈最大

2022-06-09 19:29:21 4174

原创 使用cgroup控制cpu、内存、IO资源实践

一、按比例控制cpu资源1.挂载cgroup文件系统jian@ubuntu:~/share$ sudo mkdir /cgroupjian@ubuntu:~/share$ sudo mount -t cgroup -o cpu cgroup /cgroup2.创建两个cpu资源分组ga和gajian@ubuntu:~/share$ sudo mkdir /cgroup/gajian@ubuntu:~/share$ sudo mkdir /cgroup/gb3.把进程分配给两个资源组组首先

2022-05-12 21:26:20 1374

原创 eBPF学习记录(四)使用libbpf开发eBPF程序

上一节,我们使用了bpftrace 开发eBPF程序跟踪内核和用户态的程序,bpftrace 简单易用,非常适合入门,可以带初学者轻松体验 eBPF 的各种跟踪特性。但是,bpftrace 并不适用于所有的 eBPF 应用,它本身的限制导致我们无法在需要复杂 eBPF 程序的场景中使用它。在复杂的应用中,还是推荐使用 BCC 或者 libbpf 进行开发。现在讲一下BCC 的开发,有问题可以看官方文档。现在我们试试使用BCC开发一个eBPF程序,分以下3个步骤,使用 C 开发一个 eBPF 程序使用

2022-03-06 21:38:56 6957

原创 eBPF学习记录(三)使用BCC开发eBPF程序

上一节我们已经初步体验了 eBPF 程序的开发和执行过程,现在我们试试了解一下bpftrace使用方法。

2022-02-27 22:46:47 7192 1

原创 eBPF学习记录(二)使用bpftrace开发eBPF程序

上一节我们已经对eBPF有了一定的了解,现在我们试试开发一个最简单的eBPF程序,分以下3个步骤使用 C 开发一个 eBPF 程序新建一个 hello.c 文件,并输入下面的内容:int hello_world(void *ctx){ bpf_trace_printk("Hello, World!"); return 0;}就像所有编程语言的“ Hello World ”示例一样,这段代码的含义就是打印一句 “Hello, World!” 字符串。其中, bpf_trac

2022-02-21 21:01:51 2367 1

原创 eBPF学习记录(一)eBPF介绍

一、什么是eBPFeBPF, 从它的全称“扩展的伯克利数据包过滤器 (Extended Berkeley Packet Filter)” 来看,它是一种数据包过滤技术,是从 BPF (Berkeley Packet Filter) 技术扩展而来的。BPF 提供了一种在内核事件和用户程序事件发生时安全注入代码的机制,这就让非内核开发人员也可以对内核进行控制。随着内核的发展,BPF 逐步从最初的数据包过滤扩展到了网络、内核、安全、跟踪等,而且它的功能特性还在快速发展中,这种扩展后的 BPF 被简称为 eBPF

2022-02-18 15:33:18 10331 2

原创 嵌入式linux使用trace调试步骤记录

0.内核配置:CONFIG_FUNCTION_TRACERCONFIG_FUNCTION_GRAPH_TRACER1.挂载debugfs文件系统mount -t debugfs none /sys/kernel/debug2.进入tracing调试目录cd /sys/kernel/debug/tracing3.设置为function_graph功能echo function_graph > ./current_tracer4.添加需要跟踪的函数blk_update_requeste

2022-02-10 21:24:11 3113

原创 linux用户态使用gpio中断方法

一、用户空间gpio的调用文件用户空间访问gpio,即通过sysfs接口访问gpio,下面是/sys/class/gpio目录下的三种文件:–export/unexport文件–gpioN指代具体的gpio引脚–gpio_chipN指代gpio控制器(1) export/unexport文件接口:/sys/class/gpio/export,该接口只能写不能读用户程序通过写入gpio的编号来向内核申请将某个gpio的控制权导出到用户空间当然前提是没有内核代码申请这个gpio端口比如 ech

2022-02-10 16:57:31 11956

原创 嵌入式通过绑定实现双网卡冗余

双网卡冗余是通过绑定实现的,我们需要通过以下几个步骤实现:1.配置内核选中CONFIG_BONDING2.配置/etc/network/interfaces文件,在文件中添加以下:source-directory /etc/network/interfaces.dauto lo iface lo inet loopbackauto eth0 iface eth0 inet manual bond-master bond0auto eth1 iface e

2022-01-19 10:06:55 1857

原创 软中断内核源码分析

上一章我讲解了tasklet的实现代码,我们已经知道tasklet其实是通过软中断来完成的,那么软中断到底是怎么调用的呢?首先,我们看看软中断到底有哪些类型:在这里插入代码片我们已经知道有这么多种软中断,...

2021-12-09 00:19:02 1000

原创 tasklet内核源代码分析

tasklet

2021-12-05 21:45:34 977 3

原创 apt报错Hash 校验和不符解决办法

1、桌面空白处右键选择【在这里打开终端】2、sudo apt update更新软件列表时,提示”Hash 校验和不符“,如下图所示。3、su解决方法,首先切换到root用户。4、mkdir /etc/gcrypt建立gcrypt目录。5、echo all >>/etc/gcrypt/hwf.deny输入all到所有hwf.deny文件。6、apt updateupdate第一次失败则多尝试update两次就可以了。正常更新软件包列表了。...

2021-11-24 14:06:46 5510 1

原创 linux虚拟文件系统(六)-文件关闭操作分析

close分析大家可以使用以下函数关闭一个文件,无论是字符设备文件还是已经挂载好的文件系统中的文件:int close(int fd);其中close这个函数就是使用了close函数进行系统调用,其系统调用为:SYSCALL_DEFINE1(close, unsigned int, fd){ int retval = __close_fd(current->files, fd); /* can't restart close syscall because file table e

2021-09-05 22:02:17 1099

原创 linux虚拟文件系统(五)-文件打开操作分析

open分析大家可以使用以下函数打开一个文件,无论是字符设备文件还是已经挂载好的文件系统中的文件:int open(const char*pathname,int flags,mode_t mode);其中open这个函数就是使用了open函数进行系统调用,其系统调用为:SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode){ if (force_o_largefile()) flags

2021-08-21 15:55:15 1772

原创 linux虚拟文件系统(四)-文件系统挂载操作分析

ext4文件系统挂载大家可以使用以下命令挂载一个u盘到 /mnt目录下:mount -t ext4 /dev/sda1 /mnt其中mount这个应用程序就是使用了mount函数进行系统调用,其系统调用为:SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, char __user *, type, unsigned long, flags, void __user *, data){ retur

2021-08-04 23:28:11 1283

原创 linux虚拟文件系统(三)-ext4文件系统注册分析

ext4_init_fs

2021-08-03 23:08:57 1676 1

原创 linux虚拟文件系统(二)-ext4文件系统结构

EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext2和ext3文件系统的后继版本。

2021-08-01 13:41:09 5165 1

RegBit.exe.zip

regbit工具转换器是一款方便易用的数据转换软件。regbit用它可以轻松地从十六进制转化为十进制,可以看到四个字节各个位(bit)的数,比如1或0。 基本简介 什么是16进制?英文名称:Hex number system,是计算机中数据的一种表示方法。同我们日常中的十进制表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。 解压可以直接使用

2024-05-29

glxgears x11perf测试工具.docx

glxgears 运行:通过在终端执行`glxgears`命令来启动测试,会显示三个转动的齿轮。 性能评估:通过记录FPS(每秒帧数)来衡量3D加速效果。 窗口可缩放:齿轮的转动速度与窗口大小有关,窗口越大,栅数越多。 X11PERF 用途:测试X server性能的工具,主要针对图形和窗口管理性能。 基本使用: 测试内容:包括创建和映射窗口、屏幕绘制、滚动、位图和像素映射等。 测试选项: `-display`:指定显示。 `-sync`:同步模式运行测试,主要用于调试。 `-pack`:紧凑排列矩形,用于调试点画和瓷砖模式。 `-repeat`:重复每个测试的次数。 `-time`:指定每个测试的运行时间。 `-all`:运行所有测试。 `-range`:运行指定范围内的测试。 `-labels`:为每个测试生成描述性标签。 `-fg`和`-bg`:指定前景和背景颜色或像素值。 `-rop`和`-pm`:指定光栅操作和平面掩码。 `-depth`和`-vclass`:使用特定深度和视觉类别。 `-reps`和 `-subs`:指定重复计

2024-05-07

IOZone硬盘性能测试工具培训.doc

这份文档是关于IOZone硬盘性能测试工具的使用: 1. IOZone安装: 2. IOZone基本使用: 提供了启动IOZone的基本命令,包括自动模式和生成图表的模式。 3. 测试参数说明: 4. 测试选项: 5. 批量测试: 说明了如何使用`-g`和`-n`来指定测试文件大小范围,以及`-y`和`-q`来指定测试块的大小范围。 6. 测试实例: 给出了一个具体的测试命令示例,包括了测试选项和参数。 7. 结果分析: 提供了测试结果的一个示例,解释了Excel文件中的测试数据,如传输速度等。 8. 测试类型定义: 详细定义了Write、Re-write、Read、Re-Read、Random Read/Write、Random Mix、Backwards Read、Record Rewrite、Strided Read、Fwrite、Frewrite、Fread、Freread等不同的测试类型。 9. 特殊测试: 描述了Mmap和Async I/O两种特殊测试类型。 10. 测试命令示例: 文档最后给出了一个使用`t`、`-s`、`-i`、`-F`、`-f`和`-Rb`选项的IO

2024-05-07

硬盘测试工具FIO测试方法培训.docx

这份文档是关于FIO工具的使用指南,它是一个用于Linux系统下测试磁盘性能的工具: 1. FIO简介: 2. FIO安装: 3. FIO测试方法: 主要使用FIO进行随机读、随机写、顺序读、顺序写四种模式的测试。文档以随机读测试为例,详细说明了FIO命令的参数和它们的含义。 4. 实际测试结果说明: 文档提供了一个测试结果的示例,解释了FIO输出的各个性能指标,包括io、bw、iops、runt、lat、slat、clat、cpu利用率、IO depths、IO submit、IO complete、IO issued、IO latencies等。 5. IOPS解释: 6. 不同IO引擎的特点: 文档列出了FIO支持的多种IO引擎,包括sync、libaio、mmap、splice等,并简要说明了每种引擎的特点和使用场景。 7. 测试命令示例: 文档给出了一个完整的FIO测试命令示例,用于执行随机读测试,包括了命令的所有参数和它们的设置值。 8. 磁盘统计信息: 文档解释了测试结果中的磁盘统计信息,如ios、merge、ticks、in_queue、util等指标。

2024-05-07

LTP测试工具使用.docx

这份文档是关于Linux Test Project(LTP)测试工具的使用说明: 1. LTP简介: 2. 源目录结构: 3. LTP安装: 4. LTP测试套件结构说明: 5. LTP测试套件测试内容: 详细介绍了LTP测试套件的测试内容,包括commands、kernel、kdump、network、realtime、open_posix_testsuite和misc等模块。 6. LTP测试套件配置: 提供了详细的网络测试、性能测试、实时性测试和其他特定测试的配置说明。 7. LTP测试套件使用说明: 包括如何使用runltp和runalltests.sh脚本来执行测试。 8. LTP实际运行: 描述了如何进行LTP的初始测试、压力测试和用户自定义测试。 9. 特定测试的配置和要求: 对于如tpm_tools、tcore、io_floppy、cpuhotplug等特定测试,文档提供了详细的配置步骤和前提条件。 10. 测试结果分析: 说明了如何分析测试结果,包括查看日志文件和使用工具如sar和top来监控系统性能。

2024-05-07

version-signature.c

linux内核porc文件系统创建和使用例子,写成一个驱动的形式。

2024-04-24

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

空空如也

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

TA关注的人

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