自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 优雅的玩转TDA4VM

Linux TDA4VM 安装、使用、编译、启动

2023-04-23 09:55:45 3556 7

原创 基于地平线J5的时间同步方案

简介在高级驾驶辅助系统(ADAS)场景中,时间同步是一个至关重要的需求,因为它确保了系统中所有传感器和处理单元的数据在时间上是一致的。准确的时间同步允许系统准确地重建和理解车辆周围的环境,这对于决策制定和执行动作至关重要。具体比如,各个传感器的时钟有偏差,各种传感器的采样频率也不一致,当前激光典型采样频率为10HZ,相机为30fps,高精度组合导航为100HZ。没有准确的时钟同步,各传感器在哪一帧进行融合,在哪里进行插值都没法进行判断。两个传感器即使采样频率一致,其每帧数据的采样点也一般不一致。

2024-12-12 16:26:54 1082

原创 初识U-Boot和Linux内核的设备驱动模型

总的来说,U-Boot的设备驱动模型更侧重于bootloader阶段的硬件初始化和操作,而Linux内核的设备驱动模型则提供了一个全面、动态和模块化的设备管理框架。Linux内核的设备驱动模型则更加复杂和全面,它支持动态加载和卸载驱动,以及设备的热插拔。U-Boot的驱动模型通常不涉及复杂的设备发现和匹配机制,设备的初始化和配置更多是通过静态方式在U-Boot中完成的。Linux内核的设备驱动模型通过总线机制来发现和匹配设备,驱动可以根据设备的ID和其他属性来自动匹配和初始化设备。

2024-11-20 16:09:01 320

原创 systemd最大的误解

自从我们首次提议将systemd 纳入发行版以来,它就经常出现在许多论坛、邮件列表和会议上。在这些讨论中,人们经常会听到一些关于 systemd 的谣言,这些谣言被一遍又一遍地重复,但不断重复肯定不会带来任何真相。让我们花点时间来揭穿其中的一些谣言:误解:systemd 是整体式的。如果您在启用所有配置选项的情况下构建 systemd,您将构建 69 个单独的二进制文件。这些二进制文件都用于不同的任务,并且由于多种原因而被整齐地分开。例如,我们在设计 systemd 时考虑到了安全性,因此大多数守护进程

2024-11-05 16:08:50 487

原创 linux的errno返回值含义

4)errno是线程安全的,在一个线程中设置它,不会影响别的线程对它的使用。这一点很重要,不知道有没有像我之前有过这样的问题:看起来errno像是一个全局的变量,应该不是线程安全的吧?看了这个之后,就有答案了,errno是thread-local的,也就是每个线程都有一个。2)errno的有效值都是非零的。(这个manpage有个悖论,第二段中说,errno从来不能被设为0,而在第三段又说有些接口会将其设置为0)3)errno在ISO C标准中定义的,它可能是一个宏并且不能被显示声明(也就是重新定义)。

2024-10-14 11:06:38 911

原创 Linux设备树

如果节点没有“reg”属性值,可以直接省略“@unit-address”, 不过要注意这时要求同级别的设备树下(相同级别的子节点)节点名唯一,从这个侧面也可以了解到, 同级别的子节点的节点名可以相同,但是要求“单元地址”不同,node-name@unit-address 的整体要求同级唯一。例如本地总线为树的“主干”在设备树里面称为“根节点”, 挂载到本地总线的IIC总线、SPI总线、UART总线为树的“枝干”在设备树里称为“根节点的子节点”, IIC 总线下的IIC设备不止一个,这些“枝干”又可以再分。

2024-09-29 15:59:43 1271 1

原创 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953实例分析篇)

iqs263节点中的pinctrl-0 属性指向了表明其io口属性的节点为iqs263_irq_config,相关代码也在2.3.1指示的msm8953-pinctrl.dtsi文件中。i2c_8节点中的pinctrl-0指向了定义其io口的节点i2c_8_active和i2c_8_sleep,代码如下可见该i2c的IO口为Gpio98和Gpio99。在前两篇中我们了解了DTS的背景基础知识以及发挥作用的流程,这篇文章我们以高通的MSM8953平台为例来添加一个基础的i2c设备(包含一个gpio中断)。

2024-09-29 15:02:07 699

原创 Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)

目录Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)Dts中相关符号的含义DTS中几个难理解的属性的解释地址中断其他DTS设备树描述文件中什么代表总线,什么代表设备由DTS到device_register的过程查看挂载上的所有设备请尊重原创版权,转载注明出处。Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)

2024-09-29 15:00:49 1041

原创 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)

目录什么是DTS?为什么要引入DTS?二.DTS基本知识DTS的加载过程DTS的描述信息DTS的组成结构dts引起BSP和driver的变更常见的DTS 函数DTC (device tree compiler)请尊重原创版权,转载注明出处。什么是DTS?为什么要引入DTS?    DTS即Device Tree Source 设备树源码, Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。 在Linux 2.6中,ARM架构的板极硬件细节过多

2024-09-29 15:00:04 1382

原创 uboot编译之编译过程二

Makefile核心是依赖和命令;对于每个目标,会先检查依赖,如果依赖存在则执行命令更新目标;如果依赖不存在,则会以依赖为目标,先生成依赖,依赖生成后,则执行命令。

2024-05-17 17:57:04 301 1

原创 U-boot编译make配置过程

u-boot从v2014.10版本后引入kBuild系统,使得其Makefile变的更加复杂;整个Makefile中,嵌套其他不同用途的Makefile,本文将进行简单的分析.

2024-05-17 17:55:05 355

原创 U-boot管脚复用

While the GPIO direction is set to input (GPIO_GDIR = 0), a read access to GPIO_DR does not return GPIO_DR data. Instead, it returns the GPIO_PSR data, which is the corresponding input signal value.实际上PSR才是读到的值。GPIO1_IO02代表GPIO1组寄存器的第02个寄存器,也就是第3位。

2024-05-17 17:49:43 763

原创 U-boot移植步骤

【代码】U-boot移植步骤。

2024-05-17 17:22:45 244

原创 U-boot启动内核之二bootm启动内核

整理自[uboot] uboot启动kernel篇(二)——bootm跳转到kernel的流程](bootm根据参数指向的镜像填充此结构体,然后使用结构体的内容填充kernel的启动信息,进行跳转。do_bootm_states根据states来判断要执行的操作。

2024-05-17 17:21:19 903

原创 U-boot启动内核

因此u-boot提供mkimage工具,用以生成u-boot可以识别的格式,称为uImage。c) **mkimage:**负责dtc的角色,通过解析its生成itb d) **image data file:**实际使用到的镜像文件。a) **its(image source file)文件:**类似于dts,负责描述image的信息,需要自行构造。b) **itb文件: **最终得到的image文件,类似于dtb文件,u-boot直接对其识别和解析。长度较大,需要额外信息较长。实现简单,长度较小;

2024-05-17 17:19:44 1288

原创 第4章-U-boot驱动模型之四实例

id = UCLASS_SERIAL, // 这里的uclass_id和 uclass_driver中的一致.of_match = s5p_serial_ids, // 设备树种的compatible属性{ .compatible = "samsung,exynos4210-uart" }, //注意这里的compatible要和设备树中的一致{ }

2024-05-16 15:53:09 698

原创 第4章-U-boot驱动模型之三流程

根设备其实是一个虚拟设备,主要为其他设备提供一个挂载点。

2024-05-16 15:47:42 1080

原创 第4章-U-boot驱动模型之二数据结构

有对应uclass driver并且下面挂有udevice的uclass才会被uboot自动生成。所有生成的都会挂接到gd->uclass_root链表上。不应该是dtb解析获得的吗?的确是通过dtb解析获得。uboot解析dtb以后动态生成。

2024-05-16 11:45:56 598

原创 第4章-U-boot驱动模型之一基本内容

在U-boot中引入驱动模型(driver model),为驱动的定义和范文接口提供统一的方法,提高驱动间的兼容性以及访问的标准性,u-boot中的驱动模型(DM)和kernel中的设备驱动模型类似,但是也有所区别。简单来说,u-boot把GD放在RAM区,使用它来存储全局数据, 以解决上述场景中无法使用全局变量的问题。根据上面可得GD的基地址存放在r9中,需要GD的时候,直接从r9寄存器中取的其地址即可。可以理解为具有相同属性的device对外操作的接口, 它与上层接口直接通讯,其驱动为。

2024-05-16 10:27:27 367

原创 第3章-U-boot命令行

uboot命令行

2024-05-15 17:59:30 336

原创 uboot设备树

uboot设备树

2024-05-15 17:57:58 1560

原创 第1章:u-boot启动流程

ROM中的代码是固化的,无法修改。

2024-05-15 17:55:50 1078

原创 U-boot基础

uboot基础

2024-05-15 17:52:33 198

原创 u-boot 和 rootfs/initramfs 启动 Raspberry Pi 4B

这篇文章的目的是了解嵌入式Linux的四个组成部分 —— 工具链、引导加载程序、内核、根文件系统 —— 通过使用最少的代码从头开始启动 Raspberry Pi 4 的命令。

2024-04-09 20:11:09 1488

原创 一文了解fastboot

【代码】一文了解fastboot。

2024-04-09 16:08:11 9135 1

原创 地平线J5生成镜像

board_id 是J5 dts中根节点下属性board_type 的值;board_type 属性顾名思义,它是为了区分不同J5板级差异的标记。当需要增加内核DTS与产品Boardid映射关系时,需要做后面小节的修改,以保证启动时能根据读取到的Boardid找到期望的DTB文件。程序中根据board_type决定使用哪一份dts 文件,各个dts 文件描述板级之间存在差异的J5 board。board_type 节点在J5 分为uboot 的部分与kernel 的部分。

2024-04-09 11:36:07 1083

原创 RPC之rpclib

rpclib 是一个用于 C++ 的 RPC(远程过程调用)库,提供了客户端和服务器的实现。它使用现代 C++14 构建,因此需要较新的编译器。

2024-03-30 12:41:28 861

原创 汽车芯片市场集中度最高的领域:SerDes

显示屏领域,德州仪器大约占70%的市场,ADI的份额很低。CDR,即时钟数据恢复,对于高速的串行总线来说,一般情况下都是通过数据编码把时钟信息嵌入到传输的数据流里,然后在接收端通过时钟恢复将时钟信息提取出来,并用这个恢复出来的时钟对数据进行采样,因此时钟恢复电路对于高速串行信号的传输和接收至关重要。随着信号速率的增加,信号在传输过程中受损很大,为了在接收终端能得到比较好的信号波形,就需要对受损的信号进行补偿,预加重技术的思想就是在传输线的始端增强信号的高频成分,以补偿高频分量在传输过程中的过大衰减。

2024-03-30 11:24:12 1639

原创 make menuconfig

文件进行更改时要小心,因为这些文件通常被用作某个硬件平台的默认配置。如果你的更改是针对一个具体的产品或板卡,建议使用一个具有描述性的名称,反映出配置文件的用途或目标平台。文件的内容确实反映了你的更改。如果你是在团队或社区环境中工作,并且需要将这些更改纳入版本控制系统,现在就可以准备提交你的更改。中的非默认配置选项保存到一个简化的配置文件,通常这会生成。确保使用的名称没有与现有的。文件,该文件仅包含不同于内核默认设置的选项。所做的修改同步到指定的配置文件,比如。文件,它位于你的源代码目录的顶层。

2024-03-28 20:20:59 1001

原创 嵌入式Linux系统的启动流程

接下来就是完成 flash 和 ddr 初始化,为后面从 flash 加载 bin 文件,在 DDR 中运行程序提供基本环境,一般情况下都是从flash为0的位置,将flash中的bootloader 镜像文件加载到 RAM 或 DDR 中,该引导程序最终将uboot从flash 复制到 DDR 中,然后交接给 uboot 进行下一步处理。这一阶段主要对各类 app 应用进行初始化,如文中以通信设备为例,此处主要完成对转发芯片的初始化,会涉及一些基础转发表项的初始配置,端口和各种通信总线的初始化。

2024-03-22 10:09:10 475

原创 基于CA-SDA架构

只需在尾门一句“打开露营模式”,CD701就可以听懂指令开始变形,溜背上的后穹顶就会滑动打开,后厢储物空间进一步拓展,形成类似皮卡的后厢,还使座舱和尾箱将车子分成两个独立的封闭空间,装载自行车、滑板,甚至是摩托车。所谓“孵化创新”主要负责自动驾驶、智能座舱领域的前瞻技术和人才的储备,通过建立子公司,公司能更好地实践对体制、技术和产品的创新想法,并与外部资本和资源更多地对接,能够不受限于国企背景对盈利稳定性的追求,加速向智能低碳出行科技公司转型。一般认为,汽车智能化的发展,会部分重复手机智能化的发展路径。

2024-03-19 17:32:02 598

原创 docker && k3s相关命令

检查docker 守护进程是否在运行。创建一个新的容器并运行一个命令。查看docker相关信息。应用deployment。删除deployment。查看某个pod详细信息。启动docker服务。停止docker服务。重新启动已停止的容器。删除为none的镜像。查询某个pod的日志。

2024-03-19 16:35:38 448

原创 Carla安装

废话不多说,Let's start the party!

2024-03-19 14:54:30 1383

原创 Carla的基本架构

对于从事自动驾驶领域的小伙伴们来说,Carla这个软件一定不陌生。自动驾驶往往需要大量的数据训练与安全测试,而在实际场景中收集数据成本较高,另外有许多corner cases也非常难以在现实生活测试,于是这款仿真软件便横空出世啦!Carla是一款开源的自动驾驶仿真器,它基本可以用来帮助训练自动驾驶的所有模块,包括感知系统,Localization, 规划系统等等。

2024-03-19 14:53:41 519

原创 ubuntu用户创建使用的本质

具体来说,在Ubuntu系统中,每个用户都有一个独立的home目录,其中包括用户的文件、设置和配置。因此,不同用户之间的环境是隔离的。具体来说 ,每个用户都有自己的用户ID,权限和进程空间。用户ID确保了文件和目录的访问权限,每个用户都有自己的权限组,相互之间是独立的。同时,进程空间也是独立的,一个用户的进程无法直接影响另一个用户的进程。此外,不同用户之间的环境变量和配置文件也是独立的,不会相互干扰。

2024-03-19 14:45:37 1006

原创 Dockerfile 指令详解

VOLUME ["", ""...]VOLUME 之前我们说过,容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,后面的章节我们会进一步介绍 Docker 卷的概念。为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在Dockerfile中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。这里的/data。

2024-03-19 11:18:21 811

原创 Uboot启动流程-上

本章主要讲解CPU上电到Uboot(或裸机)入口的启动流程和各个阶段实现的功能简单分析一下,主要是一些配置相关的寄存器地址与寄存器值,本教程提供给对启动流程好奇的同学学习,初学者仅当了解即可不影响后续的镜像构建。本章内容也为个人见解,如有不对之处欢迎指出上电—>设备初始化—>启动设备—>镜像头—>Uboot入口。

2024-03-18 11:50:42 1047

原创 自学BSP

我认为bsp真正难度的地方,都不在上面说的这些,而是当你去bring up一个不熟悉的新芯片的时候,碰到运行不起来,特别是在打印都没出来的阶段的时候,你如何去定位,这个时候是必须要借助调试器的,对调试工具的熟悉程度,大概的猜测,验证的这个过程,并且往往是项目上比较紧急,一堆人看着你的时候,你能顶住压力最终引导成功那么你的bsp学习之路也就可以暂时告一段落了。bsp还需要解决的一个问题就是升级的问题,OTA,如何做到自升级,如何升级系统,如何网络升级,怎么不变砖,这个也是需要学习的一个地方。

2024-03-18 10:11:10 740

原创 在vscode进行容器内开发

Visual扩展允许您使用容器作为功能齐全的开发环境。它允许您打开容器内(或安装到容器中)的任何文件夹,并利用 Visual Studio Code 的完整功能集。告诉VS Code 如何使用定义良好的工具和运行时堆栈访问(或创建)该容器可用于运行应用程序或分离使用代码库所需的工具、库或运行时。工作区文件从本地文件系统挂载或复制或克隆到容器中。扩展在容器内安装和运行,它们可以完全访问工具、平台和文件系统。这意味着您只需连接到不同的容器就可以无缝切换整个开发环境。这使得 VS Code 能够提供。

2024-03-15 17:44:29 5073 1

原创 Docker基础概念

Docker最初是dotCloud公司创始人在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在GitHub上进行维护。Docker项目后来还加入了 Linux 基金会,并成立推动开放容器联盟(OCI)。Docker自开源后受到广泛的关注和讨论,至今其GitHub 项目已经超过 5 万 7 千个星标和一万多个fork。甚至由于Docker项目的火爆,在2013年底,

2024-03-15 12:36:22 1160

空空如也

空空如也

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

TA关注的人

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