自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (2)
  • 收藏
  • 关注

原创 C语言的__attribute__机制

_attribute__声明函数属性可以使用__attribute__来声明函数的属性,这些属性可以帮助编译器优化调用或更仔细地检查代码的正确性。例如,属性(noreturn)用来指定函数从不返回。函数属性声明由__attribute__关键字引入,函数后跟一个用双括号括起来的属性说明。你可以在声明中指定多个属性,方法是在双括号里面用逗号将各个声明分开。

2023-05-05 19:06:29 209 1

原创 线程的运行状态

我们可以通过top指令查看进程的运行状态,里面可以看到进程或者线程的运行状态,其中R代表线程运行,S为可中断的空闲态,其他依次按照字符串对比。

2023-04-25 22:36:19 492

原创 嵌入式学习之路

作为一个嵌入式er,主要的学习之路在于软件。因此需要打通1.uboot启动,如何启动内核,uboot移植等;2.kernel内核启动,需要学习内核的进程调度、文件系统、内存管理、驱动环境、协议栈、设备树等内容;3.根文件系统,嵌入式一般使用busybox制作根文件系统,以及最终启动用户的APP应用程序4.arm的基本知识,主要包括arm的AMBA总线、GIC中断、MMU、Cache指令集等内容。5.基于arm内核的芯片常用外设:iic spi uart pcie gpio sgmii/

2023-04-25 21:53:56 449

原创 busybox之init_main源码分析

busybox是一个轻量级的Linux工具箱,其中包含了一些基本的UNIX工具。init_main是busybox中的一个重要函数,其作用是启动系统初始化,包括初始化系统进程、挂载文件系统、执行rc脚本等。

2023-04-07 21:39:08 225

原创 内存问题理论基础

关于c、c++语言,内存最终是绕不过的难点和重点,没有对内存进行掌握,那么就不能认为熟悉了对应的语言。

2023-03-29 22:43:51 244

原创 从调制到LTE通信系统

文章目录1.通信系统2.传输方式2.1数字信号调制方式2.2 EVM是什么3.LTE第四代通信系统3.1 LTE帧结构3.2 LTE FDD帧结构3.3 RE RB是如何承载bit的3.4 LTE TDD帧结构3.5 LTE的物理信道4.CPRI协议4.1 cpri协议总述4.2 CPRI基本帧4.3基本帧 超帧 10ms无线帧4.参考文献从调制如何发展到LTE第四代系统,本文旨在解释其中的关系,我们先简要介绍之间的关系。1.信息本身是需要通过信号来进行发送的,通信的本质就是发送端发送信号(基站),接

2023-01-31 20:39:37 746

原创 DHCP协议的Wireshark抓包分析

DHCP(Dynamic Host Configuration Protocol),动态主机配置协议:计算机用来获得配置信息的协议。DHCP容许给某一计算机赋以IP地址而不需要管理者在服务器数据中配置有关该计算机信息,而当 Client传送封包给 Server时,采用的是UDP 67 Port,从 Server传送给 Client则是使用UDP 68 Port。

2022-12-10 18:14:55 1801

原创 利用QEMU模拟启动uboot 内核 busybox

文章目录1.QEMU是什么2.安装QEMU2.1源码安装2.2联网安装2.3安装交叉编译链3.Linux内核kernel3.1内核编译4.Linux根文件系统busybox4.1 编译busybox4.2 制作根文件系统4.3修改根文件系统增加欢迎界面5.bootloader启动5.1介绍5.2编译u-boot5.3配置网络相关5.3.1配置tftp5.4通过uboot启动内核5.5效果展示参考视频: https://b23.tv/25kQaZc环境配置:实体机:Windows7虚拟机:Linux

2022-11-27 21:31:21 2313

原创 busybox源码介绍

busybox版本:busybox-1.35.0.tar.bz2tar -xvf busybox-1.35.0.tar.bz2

2022-11-20 10:03:31 718

原创 Linux的进程管理与proc文件系统—9

文章目录1.背景介绍2.sched_debug字段3. schedstat字段4.proc/pid/task1.背景介绍proc文件系统提供了对内核参数信息,在此只介绍进程相关的参数;proc是内核提供的一种文件系统,内核代码位置:linux3.0.20/fs/proc。shell上的位置:文件:/proc/sched_debug/proc/schedstat目录:/proc/pid/task/pid/task/pid/task/pid/线程相关的字段: sched comm sta

2022-10-24 18:01:14 1337

原创 交叉编译gdb源码

GDB 全称“GNU symbolic debugger”,诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。

2022-10-06 23:09:19 2100

原创 Linux的进程管理之单进程多线程实例说明—8

文章目录1.理论基础2.单进程中,双线程,如何调度2.1 SCHED_FIFO50与SCHED_NORMAL120如何调度2.1.1 运行10次2.1.2 运行50次2.2 SCHED_RR50与SCHED_NORMAL120如何调度2.3 SCHED_NORMAL120与SCHED_FIFO50如何调度2.3.1 运行10次2.3.2 运行50次2.4 SCHED_NORMAL120与SCHED_FIFO50如何调度2.5 SCHED_NORMAL110与SCHED_NORMAL120如何调度2.6 SC

2022-09-25 11:32:33 681

原创 Linux的进程管理之CFS调度器—6

CFS调度器(Completely Fair Scheduler)是所有普通进程所依赖的调度器,其优先级为100-139,常常用于用户程序;此调度器实现了SCHED_NORMAL、SCHED_BATCH 、SCHED_IDLE策略,CFS的全称为完全公平的调度器,其中cpu上的队列通过cfs_rq指向其哈希表,调度实体sched_entity通过红黑树进行组织;

2022-09-02 20:29:09 403 1

原创 FTP协议的Wireshark抓包分析

文章目录1.理论介绍2.ftp安装3.windows上连接ftp服务器3.1.通过浏览器访问3.2.通过资源管理器访问3.3.通过命令行进行访问(本次采用方式,使用主动模式连接)4.Wireshark抓包ftp分析4.1Wireshark抓包4.2抓包分析环境配置:Ubuntu虚拟机(服务器):192.168.153.132win7实体机(客户端):192.168.153.11.理论介绍FTP是FileTransfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于In

2022-08-21 16:54:12 8381

原创 Linux的进程管理之单进程多线程实例说明—7

本节旨在说明RT策略下,单进程双线程的优先级与调度情况。之前已经解释了调度器的知识,但是通过实例化后可以加深对此的理解。在linux中使用pthread_create创建线程,此并不涉及组调度与多核调度,环境为ubuntu虚拟机,单核心配置。

2022-08-19 20:45:39 817

原创 ARM内核、指令集等简介

1.ARM架构学习ARM即是公司名,是一家英国的公司,也是芯片名,随便嵌入式设备的发展,ARM也随之急速发展;如何去学习ARM,作为一名合格的嵌入式er,无论是从事:内核工程师;驱动工程师;应用工程师,都很有必要了解ARM的架构原理,掌握了ARM相关的知识再去学习UBOOT、kernel、驱动以及分析应用层的调用栈等问题才会有所突破。1.1.ARM相关背景介绍经常听到某芯片基于ARM核开发出来的芯片,具备什么什么功能;如华为的麒麟980基于ARM-A76内核;1.1ARM指令集介绍1…2A

2022-08-12 20:33:09 1807

原创 c语言变长数组与数组越界保护

在c99协议标准中,增加了变长数组(VLA)这一特性,本文旨在从汇编的角度来理解其原理,并且简单阐述下数组越界保护的内容。在此顺带说一下自己对c语言学习的理解,关于常规的表达式、语法等不做阐述,主要对一些复杂的关键字或者特性的学习方式作以自己的感悟。如:c语言中对const、static、变长数组等的学习。1.通过尝试式学习,即通过代码实现进行尝试说明。2.通过的内存段工具binutils,可以通过工具查看分析代码的段、符号、汇编等。.........

2022-08-04 08:23:57 1065 1

原创 Linux的进程管理之RT调度器—5

RT调度器是所有实时进程所依赖的调度器,其优先级为0-99,常常用于嵌入式设备;此调度器实现了SCHED_RR与SCHED_FIFO策略,最主要的区别是SCHED_RR是有时间片的概念,而SCHED_FIFO属于一直执行的状态,直到执行此线程主动退出,或者被高优先级的线程抢占。其中cpu上的队列通过rt_rq指向其哈希表,调度实体sched_rt_entity通过哈希表进行组织;......

2022-07-27 20:51:34 1389

原创 Linux的进程管理之主调度器源码分析—4

内核版本体系架构ARM。

2022-07-22 08:18:23 936

原创 Linux的进程管理之相关数据结构—3

先回顾下之前的定义,进程调度是指操作系统按照某种策略或者规则选择进程占用CPU进行运行的过程;即什么时候调度(调度时机)、怎么调度(上下文切换)、按照什么方式调度(调度策略)

2022-07-15 20:00:08 799

原创 Linux的进程管理之进程与线程—2

我们先想想多进程多线程的特点:多进程特点:每个进程独立运行,一个进程挂死,不影响其他进程的运行;虚拟内存隔离,内存安全。需要增加进程切换的开销。多线程特点:内存无法进行隔离,一个线程挂死,整个程序挂死;但是线程切换的开销相对进程低;在此特点的基础上,回答为何需要多进程多线程,当然是我们需要多进程与多线程的优点,Linux是一个多进程的操作系统,同时也支持多线程。比如stm32系列可以运行freertos uCOS等内核,此系统也可以内存管理、任务调度等功能,但是最大的区别是不能运行多进程的程

2022-07-05 22:55:05 426

原创 Linux的进程管理之概述—1

Linux的进程调度专栏1.Linux的调度策略都有哪些?2.Linux的线程与进程的关系是什么?3.Linux的线程优先级是怎么设置的?4.有一个进程中,两个线程,一个RR 50优先级,RR 50优先级,执行顺序是什么?5.有一个进程中,两个线程,一个FIFO 50优先级,FIFO 50优先级,执行顺序是什么?7.有一个进程中,两个线程,一个FIFO 50优先级,CFS 110优先级,执行顺序是什么?6.有两个进程中,各有两个线程,一个FIFO50、FIFO60 一个FIFO40、FIFO7

2022-07-05 22:54:34 468

原创 ARM64的MMU内存管理工作原理

之前有介绍过ARM32的MMU介绍,在ARMv8-A引入了64位的架构,从而也引入了64位的MMU的技术,原理是和ARM32类似的,之前分配的粒度有所区别,arm32中有支持2级页表映射,在arm64中,最大支持为4级页表映射。在arm32中,可以映射的地址为2的32次方为4GB的地址空间。在arm64中,可以映射的地址为2的64次方为16EB的地址空间(1EB=1024PB=1024*1024TB),可以看出arm64的地址空间比arm32多了好多,arm官方其实只使用了一部分,如图:将其分为内核

2022-06-26 09:12:29 1246

原创 ARM的DMA-330控制器简述

DMA即,direct memory access直接存储器访问,ddr内存与外设相对于cpu的core来说速度是很慢的,在内存复制数据的过程中、或者外设的数据复制等操作中,core无法做其他事情,只能等待数据复制完成才能干起它的。总结来说:1.是外设和内存太慢了(相对core来说),cpu的core在数据复制过程中占据了core的资源,因此设计了一种可以直接进行数据传输的器件,就是DMA,当然DMA的传输也是需要core给指令的。2.cpu的core给DMA发数据传输指令,DMA执行数据传输,此时

2022-06-24 23:02:54 1605

原创 ARM的GIC2.0的简述

GIC即Generic Interrupt Controller ,中断控制器,顾名思义,用来管理ARM中断的IP。ARM的gic一共分为4个版本,从gic1.0-gic4.0,本文主要介绍gic2.0。GIC主要分为以下几个部分:Distributor分配器、CPU接口两个部分,虚拟化支持情况下增加了虚拟CPU接口部分;这个分配器集中了所有的中断源,确定每个中断的优先级,并针对每个CPU接口将优先级最高转发给接口,并进行优先级屏蔽和抢占处理;分配器的编程接口:1.全局启用向CPU接口转发中断。2.

2022-06-23 22:57:13 457

原创 telnet协议的Wireshark抓包分析

常用的登录远程服务器的方式有telnet、ssh等协议,本文讲解telnet的原理,以及通过抓包分析tenet的报文。环境配置,采用Windows实体机加Linux虚拟机的方式进行说明。Linux虚拟机作为telnet服务器,Windows作为telnet客服端,使用MobaXterm软件进行连接。虚拟机:Linux Ubuntu ip:192.168.153.130实体机:windows7 ip:192.168.153.1默认情况下,Ubuntu下是没有安装telnet服务器的;需要

2022-06-22 21:54:56 3779

原创 ARM官方资料学习

ARM是即是一家公司名,也是一种芯片,ARM的文档是比较全的。学习ARM除了其他的资料外,官网公布的资料也是一种较好的选择,具有权威性与准确性,不过缺点是资料是英文的。https://developer.arm.com/architectures#aq=%40navigationhierarchiescategories%3D%3D%22Architecture%20products%22%20AND%20%40navigationhierarchiescontenttype%3D%3D%22Produ

2022-06-20 17:51:13 2156

原创 网络抓包工具Wireshark与tcpdump介绍

文章目录1.网络协议介绍2.Wireshark工具介绍2.1 Wireshark的使用3.tcpdump工具介绍3.1 tcpdump的使用3.2 tcpdump的源码与编译1.网络协议介绍在互联网的世界中,网络协议将所有的设备接入到一个网络,才有了我们的信息共享,大数据时代。开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织提出,一个试图使各种计算

2022-06-16 20:47:38 2047

原创 ARM交叉编译

编译与执行,编译与执行必须在同一个平台才可以进行正确的执行,我们常见的硬件平台为X86、ARM、MIPS等,一般我们将嵌入式设备称为目标机,我们自己的电脑称为宿主机,这里就涉及一个问题,目标机(一般为ARM)与宿主机(一般为x86)的硬件平台是不同的,因此涉及到在宿主机上编译目标机上可执行的程序,这就涉及到交叉编译,即在宿主机上编译,在目标机上执行。为何需要交叉编译,在目标机上编译执行不可以吗,当然可以,只不过对于嵌入式设备,一般为基于arm的嵌入式设备,但是嵌入式设备的资源较少,ram与flash等资源

2022-06-15 21:03:54 2004

原创 ARM的AMBA 2.0总线

文章目录1.什么是AMBA1.1AMBA2.0总线的分类1.2几种总线的连接方式2. AMBA2.0的AHB总线2.1AHB的总线拓扑2.2AHB的仲裁器arbiter2.3AHB的译码器decoder3. AMBA2.0的ASB总线4. AMBA2.0的APB总线4.1APB bridge4.2APB slave5.参考资料1.什么是AMBAAMBA即Advanced Microcontroller Bus Architecture ,是ARM公司定义的片内总线标准,广泛使用与ARM芯片。AMBA目

2022-06-11 16:55:35 1746

原创 main函数是如何被调用的

首先我们的问题是,linux用户编程下main函数是第一个被执行的函数吗?先给出结论,不是的,不是的,第一个不是main函数。简单的main函数其实很复杂,我们只是站巨人的肩上(这个巨人就是内核、glibc、系统调用)。1.背景介绍在linux下进行c语言编程,我们首先明确几个概念,c语言、编译链、标准c库、应用程序、linux内核几个的关系。1.1.c语言做了什么?规定了c语言的语法,如关键字、运算符、表达式和函数等,它本身并不提供任何库函数供用户使用。1.2.什么是c语言标准库,c标准库、

2022-06-07 17:43:59 2086

原创 内核的system_state全局变量

内核一共分了五种状态,使用全局变量来进行区分内核的状态信息。内核在开始时候为SYSTEM_BOOTING状态,在kernel_init函数中的init_post函数将system_state赋值为SYSTEM_RUNNING,在此后内核为运行态;其中build_all_zonelists函数中,需要区分system_state的全局变量进行区分;

2022-06-01 23:14:52 466

原创 linux内核的启动过程之汇编—1.3

内核的汇编阶段在经历了以上的处理后

2022-05-29 21:22:40 514

原创 ARM的MMU内存管理工作原理

旨在系统理解mmu,带着问题来理解原理,本文以armv7进行说明。虚拟地址 物理地址 逻辑地址 线性地址 运行地址之间的联系?逻辑地址是由编译器所产生的符号表里面的地址(可以使用binutils工具查看可执行文件的符号表);(逻辑地址通过段映射为线性地址(虚拟地址为中间层),如果未开启二级映射,其实就是物理地址。这个是x86中的说法)因为arm将最开始的地址称为VA即virtual address,即虚拟地址,然后有一个中间层的地址,最后到物理地址。不要被这些地址的名字所蒙蔽,先看原理再回过头看看

2022-05-21 11:49:47 1768

原创 学习心得CSDN

1.为何需要使用CSDN作为一个嵌入式er,所需要学习的东西甚多,从uboot、kernel、根文件系统、驱动、shell等等知识,csdn即是一个在线的笔记本,不但可以分享知识供大家参考交流,而且可以对自己的学习作以记录。2.关于笔记处在一个数据量很大的时代,但是我们所需要的资料并不一定很容易搜索到;在工作中遇到的一些问题可能后续也可能遇到;知识的学习需要温故而知新,可能对同样的技术问题在不同的阶段认知会有所不同,因为技术知识也是在日积月累中变化的;因此我们需要一个平台供学习工作记录经验,cs

2022-05-18 22:26:32 195

原创 linux内核的启动过程之汇编—1.2

内核的启动过程主要包含汇编、c语言两个阶段

2022-05-18 22:17:58 628

原创 windows与linux虚拟机实现文件共享

常用的虚拟机Vitulbox VMware workstationlinux操作系统centos Ubuntu远程工具xshell secureCRT mobaxterm

2022-05-15 17:20:31 2392

原创 linux内核与uboot busybox以及应用程序联系—1.1

内核的启动流程应该把握主线,逐渐细化的进行学习

2022-05-15 00:58:29 814

原创 Linux内核源码总体介绍—1

学习linux内核最好的方式当然是阅读内核源码

2022-05-15 00:53:44 3851

原创 Linux静态库与动态库

gcc完成编译需要四部:预处理、编译、汇编、链接。在linux中静态库一般为.a文件动态库为.so文件。

2022-05-14 23:16:58 557

linux source- linux-3.0.20

linux source

2022-05-20

DEN0024A_v8_architecture_PG.pdf

DEN0024A_v8_architecture_PG.pdf ARM-V8指令集、架构手册

2022-05-20

空空如也

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

TA关注的人

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