
linux嵌入式开发
文章平均质量分 80
田园诗人之园
我是一位平凡的诗人,也是一位平凡的工程师。
展开
-
ubuntu如何远程ssh登录Windows环境并执行测试命令
paramiko是一个用于在Python中实现SSH(Secure Shell)协议的模块,它提供了客户端和服务器的功能,使得你能够在网络上安全地执行命令、传输文件等。原创 2023-12-12 22:45:42 · 2262 阅读 · 39 评论 -
repo init报error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
在ubuntu执行repo init的时候报了repo init报error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed这种错误,解决方法是需要更新本地证书。原创 2023-11-23 21:38:02 · 1992 阅读 · 18 评论 -
ubuntu 20.04如何切换gcc/g++/python的版本
当系统同时存在gcc-9以及gcc-10时该如何切换让当前的系统gcc版本指向gcc-9或是gcc-10呢?g++也同样如此。面临更严重问题的python更是如此,ubuntu 目前默认安装的python版本是2.7,而我们经常使用的版本为3.xx。原创 2023-11-22 22:36:56 · 1649 阅读 · 30 评论 -
conan和cmake编译器版本不匹配问题解决
执行环境:ubuntu。原创 2023-11-07 23:39:59 · 1717 阅读 · 13 评论 -
linux设备树节点添加新的复位属性之后设备驱动加载异常问题分析
若新添加的设备属性需要执行具体的功能,那需要按照3.1章的部分去添加对应的设备驱动程序。若不需要,则在原始的设备驱动初始化流程直接去解析对应的设备属性即可。原创 2023-09-13 21:58:36 · 2228 阅读 · 58 评论 -
qemu运行提示‘virtio-9p-pci‘ is not a valid device model name以及rootfs_debian_arm64.ext4‘ and probing gues
在使用qemu调试启动的内核时,执行qemu启动命令提示了以及rootfs_debian_arm64.ext4’ and probing gues的错误,在解决的时候分别参考了几篇其他同学之前总结的文章。原创 2023-08-31 21:30:17 · 2232 阅读 · 66 评论 -
ELF program/section segment解析
在文章中介绍了在linux remoteproc驱动中对elf文件各个不同类型header parse的函数以及对应的定义。在该文中则重点解释program segment的含义以及对应数据处理。原创 2023-08-10 23:06:57 · 1053 阅读 · 76 评论 -
linux remoteproc驱动中elf解析函数实现分析
在linux中存在的remoteproc的驱动中用到了很多elf解析的函数,比如以及等等接口。当我们直接搜对应的函数时会发现无法找到其定义,其实这些函数的实现被定义在头文件中。原创 2023-08-09 22:53:27 · 2377 阅读 · 67 评论 -
Linux Driver 和Device匹配过程分析(2)
以linux-5.14.10内核为例来分析总线注册过程:是基于设备树的处理流程分析的,不过对于bus/dev/drv的模式只是在match函数匹配的过程中稍有差异,其他的流程是一样的。本篇文章1,总线注册匹配过程和是介绍的两种不同的设备驱动注册的流程触发的初始化流程,而则是通过设备注册的处理流程来介绍整个总线设备驱动流程关系的。原创 2023-05-05 22:11:16 · 1088 阅读 · 0 评论 -
centos7安装arm-none-eabi-gcc
如果出现3.1所示的错误,说明当前的arm-none-eabi-gcc软件没有支持所要编译的处理器,需要更新到支持该处理器的软件版本或者直接更新到最新的版本去编译代码。可以根据自己的环境去下载对应的arm-none-eabi-gcc软件。对于我的环境来说是x86_64的,所以下载了第三个软件包。打开/etc/profile文件,在该文件的最后输入下面这一行,然后source。source /etc/profile使环境变量生效。原创 2023-03-27 10:33:39 · 2268 阅读 · 0 评论 -
【ubuntu 20.04 buildroot编译错误以及修正方法】
错误导致编译失败,是因为当前的磁盘的格式是非ubuntu的格式,当前磁盘的格式为ntfs导致的,需要将当前的磁盘修改为ext4格式的。打开/etc/fstab,将下面的一行配置添加到/etc/fstab中,则每次启动都会去自动挂载/dev/sda3磁盘节点。将/media/rlk/0F2F2D3A61075EBB的挂载点卸载。把/dev/sda3格式化为ext4。重新创建一个新的挂载点。原创 2023-02-24 13:36:53 · 1595 阅读 · 0 评论 -
ca-certificates.crt CApath: none
在搭建一个ubuntu虚拟机环境的时候,搭建完repo环境之后,执行repo init报了的错误,经过实现,通过下面的方法可以解决该问题。原创 2023-02-20 09:22:12 · 1552 阅读 · 0 评论 -
-flto-partition=none编译错误解决
在编译一些代码的时候报了下面的错误告警信息,当出现这种错误的时候需要看一下自己当前的。查看gcc是否已经编译安装了gcc-9*,如果有的话可以替换一下当前低版本的gcc。如果当前版本的gcc低于9的话,会出现上面的错误,需要去升级一下gcc到9及以上。如果没有安装gcc 9及以上的高版本,则需要安装一下。原创 2023-02-06 19:30:55 · 1005 阅读 · 0 评论 -
SystemC 环境搭建
我们要搭建一个基于systemc-2.3.3的环境,可以基于上面的链接去下载对应的版本,也可以通过下面的方式去下载更新,然后安装。原创 2023-02-06 15:45:03 · 1027 阅读 · 0 评论 -
qemu学习之添加一个新machine
本文以xilinx的qemu为例去介绍,首先通过介绍machine的添加流程去了解添加一个新的machine需要注意和关注的地方。然后再通过完全从头开始添加一个machine的方式去处理,然后编译看一下实验效果。原创 2023-01-28 15:43:28 · 4206 阅读 · 12 评论 -
uboot 下nor flash 读写命令使用和验证方法
sf read是将从flash offset地址处的flash数据存放到addr内存地址处,所以此处addr要求为一个有效的内存地址,读取的数据长度为len,此处的len被识别为是16进制数据。sf read是将从内存addr地址处的内存数据写到flash offset地址处,所以此处addr要求为一个有效的内存地址,写入的数据长度为len,此处的len被识别为是16进制数据。在执行sf read/write的时候,addr必须是一个有效的内存地址,否则在执行读写的时候会触发系统的异常。原创 2023-01-12 23:05:31 · 4056 阅读 · 1 评论 -
设备树编译以及反编译命令
如果提示缺少设备树编译工具dtc,使用下面的命令安装一下即可。原创 2023-01-11 23:32:13 · 2259 阅读 · 0 评论 -
uboot源码下载以及编译
环境:ubuntu 20.04。原创 2022-12-21 11:11:32 · 6222 阅读 · 0 评论 -
ubuntu vim中文显示乱码
在ubuntu下的.vimrc文件最后输入下面的配置,保存退出即可。在中输入的配置原创 2022-12-05 16:19:47 · 2508 阅读 · 0 评论 -
Network error: Connection refused
在用mobaXterm ssh去链接vmware虚拟机ubuntu时一直报下面的错误。出现该问题之后我做了下面的检测:通过下面的命令确认ssh服务是否已经启动2.2 重启ssh服务2.3 安装ssh如果重启ssh服务时提示系统没有安装ssh,则可以通过下面的命令去安装ssh原创 2022-12-05 15:03:31 · 5635 阅读 · 5 评论 -
Highlight_Matching_Pair问题解决
当我们在用vim打开一些文件时,会经常遇到一下面的问题1.2 出发问题出现的条件1.2.1 访问到“()”时会出现1.2.1 访问到不成对的“{}”时会出现2 解决办法当上网查看相关的词条时,可以看到有一条描述了出现时的解决办法,下面的这段解释就是让我们去检查matchparen.vim文件的时间戳,确认一下是否是最新的版本,vim的matchparen.vim的最新版本(或者整个runtime的最新版本)可以去上去查看确认。在ubuntu上更新vim版本的方法如下所示:通过上面的方法我原创 2022-12-05 12:26:15 · 1066 阅读 · 0 评论 -
Linux网卡驱动程序详解
本博客转载自:http://blog.youkuaiyun.com/luyee2010/article/details/7019975在此仅仅讨论网络设备驱动的一般写法,有关硬件部分的相关代码由于硬件规格不同,予以省略。有什么地方错误,或补充,欢迎大家提出。 1, 驱动模块的加载和卸载 如果网络设备(包括wireless)是PCI规范的,则先是向内核注册该PCI设备(pci_register_drive转载 2016-09-27 08:46:40 · 4044 阅读 · 0 评论 -
qemu-system-aarch64使用和相关参数介绍
【代码】qemu-system-aarch64使用和相关参数介绍。原创 2022-10-11 12:37:30 · 11111 阅读 · 0 评论 -
内嵌汇编(ARM64)
如《Using the GNU Compiler Collection-For gcc version 12.2.0》所说:asm关键字允许您在C代码中嵌入汇编指令。GCC提供了两种形式的内联asm语句。基本asm语句是没有操作数的(参见第6.47.1节[基本Asm],第652页),而扩展asm语句(参见第6.47.2节[扩展Asm],第653页)包含一个或多个操作数。扩展形式倾向用于在函数中混合C语言和汇编语言,但是要在顶层包含汇编语言,您必须使用基本asm语句。原创 2022-09-20 23:37:20 · 2527 阅读 · 0 评论 -
virtio device type : Block Device
该文是通过对virtio-1.2官方文档翻译生成的,文档的下载地址为: http://docs.oasis-open.org/virtio/virtio/v1.2/The virtio block device is a simple virtual block device (ie. disk). Read and write requests (and other exotic requests) are placed in one of its queues, and serviced (proba原创 2022-09-09 00:32:33 · 632 阅读 · 0 评论 -
Virtio Over MMIO
该文是通过对virtio-1.2官方文档翻译生成的,文档的下载地址为: http://docs.oasis-open.org/virtio/virtio/v1.2/原创 2022-09-07 23:15:17 · 1199 阅读 · 0 评论 -
在ubuntu上执行QEMU的编译安装
将下面的下载的qemu-7.0.0.tar.xz放到自己想放置的目录中, 然后执行下面的步骤。目录下,直接查看它的版本号即可。由下面的提示可以看出,我们的qemu已经是最新的7.0.0了。当系统提示找不到Ninja时,执行下面的命令去安装即可。安装之后的可执行程序在。原创 2022-09-07 07:44:41 · 5483 阅读 · 1 评论 -
Virtio - General Initialization And Device Operation
该文是通过对virtio-1.2官方文档翻译生成的,文档的下载地址为: http://docs.oasis-open.org/virtio/virtio/v1.2/The driver MUST follow this sequence to initialize a device:驱动程序必须按照以下顺序来初始化一个设备:Legacy devices did not support the FEATURES_OK status bit, and thus did not have a graceful原创 2022-09-06 22:19:00 · 336 阅读 · 0 评论 -
Basic Facilities of a Virtio Device (二)
当VIRTIO_F_RING_PACKED被协商时,这指的是描述符环内的偏移量(以描述符条目为单位)下一个可用的描述符将被写入其中。对于VIRTIO_F_RING_PACKED,这是引用下一个可用描述符的包装计数器。当一个virtio设备创建的对象需要与一个单独的virtio设备共享时,第一个设备可以通过生成UUID来导出该对象,然后将UUID传递给第二个设备来识别该对象。共享内存区域对于设备是一个额外的设施,需要在设备和驱动程序之间持续共享的内存区域,而不是像virtqueue元素那样在它们之间传递。原创 2022-09-03 19:18:38 · 470 阅读 · 0 评论 -
Basic Facilities of a Virtio Device (一)
通过总线特定的方法发现和识别一个virtio设备(见总线特定部分:4.1通过PCI总线,4.2通过MMIO和4.3通过通道I/O)。原创 2022-09-01 23:14:55 · 848 阅读 · 0 评论 -
virtio-Introduction
所有的结构都被假设为没有额外的padding。注意,这个符号有点类似于C位字段语法,但不应该天真地转换为可移植代码的位字段符号:它匹配小端架构上的C编译器打包的方式,而不是大端架构上的C编译器打包的位字段的方式。本文件中的关键词“必须”、“必须不”、“必需”、“应”、“不应”、“应该”、“不应该”、“推荐”、“可能”和“可选”的解释为[RFC2119]中所述。记录存储在低15位x中的值A和存储在高位x中的值B,依次使用结构S开头的大字节顺序存储,紧接着是从结构开始的2位)的大字节顺序存储无符号整数y。...原创 2022-08-31 22:14:41 · 781 阅读 · 0 评论 -
Virtio Over PCI Bus
Virtio可以使用各种不同的总线,因此标准被分为Virtio通用部分和总线特定的部分。原创 2022-08-30 00:12:01 · 1083 阅读 · 0 评论 -
编译和运行一个ARM64内核
首先先解压下载的busybox,我自己下载的是当前最新版本的busybox-1.35.0,然后按照下面的步骤去制作最小文件系统即可。这会打开一个配置菜单,在配置菜单中修改以下几个选项,然后保存退出。需要下载busybox和linux内核,我下载的是。的内核,但是在使用的时候有一些问题,把内核切换到。在执行下面的步骤之后会生成。按照下面的方式去配置。..................原创 2022-08-25 21:49:27 · 3964 阅读 · 0 评论 -
linux驱动程序的加载顺序
对于linux内核,链接器所需要处理的链接文件位于文件,其对应各段的定义位于文件。文件的.init.data段标识了要将哪些段放入到.init.data段中。我们需要重点关注的是INIT_CALLS段。INIT_CALLS的定义位于文件中,如下代码所示,INIT_CALL段也包含很多不同的段,现在拿为例来说明,段定义为,将以及放入到INIT_CALLS段中。level对应于在1.2 __define_initcall定义的id。...原创 2022-08-16 23:58:00 · 2746 阅读 · 0 评论 -
uboot 下mmc read/write命令使用和验证方法
表示要写入mmc设备的原始数据的内存地址。: 表示要读取的mmc的sector地址。: 表示要写入的mmc的sector地址。: 表示保存从mmc读出数据的内存地址。: 表示要读取多少个sector的数据。: 表示要写取多少个sector的数据。的eMMC地址处,要写入的数据长度为。该条命令的意思是要从。的eMMC地址处读取。该条命令的意思是要把。内存位置处的数据写到。...原创 2022-08-06 17:40:48 · 6021 阅读 · 0 评论 -
linux内核对设备树的处理(一)
本篇文档是基于韦东山老师的设备树专题学习总结而来。内核内核对设备树的处理1 内核head.S对dtb的简单处理1.1 Kernel startup entry point stext1.2 __enable_mmu和__turn_mmu_on1.2.1 __enable_mmu1.2.1 __turn_mmu_on1.3 __mmap_switched1.3.1 __mmap_switched1.3.2 __mmap_switched_dataLinux uses DT data for three m原创 2022-05-26 13:43:04 · 552 阅读 · 0 评论 -
linux 设备树学习总结
linux 设备树学习总结1 linux引入设备树的原因以及设备驱动实现方法1.1 设备驱动的编写方法简介1.1.1 传统方法:1.1.2 总线设备驱动模型方法:1.1.3 驱动设备树方法:1.2 字符设备驱动的传统写法1.3 总线设备驱动模型写法1.3.1 xxx_drv.c1.3.1.1 驱动程序流程1.3.1.2 韦东山老师驱动示例1.3.2 xxx_dev.c1.3.2.1 驱动程序流程1.3.2.1 韦东山老师设备注册示例1.4 驱动设备树方法1.4.1 xxx_drv.c1.4.1.1 驱动程序原创 2022-05-24 19:05:23 · 672 阅读 · 0 评论 -
Linux Driver 和Device匹配过程分析(1)
以linux-5.14.10内核为例来分析总线注册过程:1,总线注册匹配过程总线注册过程以rk3399的PCIe控制器注册过程为例去做分析。1.1 struct platform_driver代码路径:include/linux/platform_device.h 206 struct platform_driver { 207 int (*probe)(struct platform_device *); 208 int (*remove)(struct platf原创 2022-05-13 22:42:11 · 3385 阅读 · 0 评论 -
linux-DMA-API : 使用通用设备的动态DMA映射
使用通用设备的动态DMA映射 ============================================ James E.J. Bottomley <James.Bottomley@HansenPartnership.com>本文档描述了DMA API。 对于API的更温和的介绍(以及实际的例子),请参见Documentation/DMA-API-HOWTO.txt。这个API被分成两部分。 第一部分描述了基本的API。第...原创 2021-05-18 10:30:15 · 4682 阅读 · 0 评论 -
ARM Parameters in general-purpose registers
转载自:https://developer.arm.com/documentation/den0024/a/The-ABI-for-ARM-64-bit-Architecture/Register-use-in-the-AArch64-Procedure-Call-Standard/Parameters-in-general-purpose-registersFor the purposes of function calls, the general-purpose registers are div转载 2021-01-25 10:49:11 · 391 阅读 · 0 评论