u-boot2020.04移植(eMMC/SD调试)

文章目录前奏流程驱动匹配分析需要的属性调试补充结果前奏随着u-boot版本的变迁,u-boot的功能也越来越多越来越强大,在较新的u-boot中已经支持很多不同类型的文件系统,告别了以前需要移植者自己手动规划eMMC/SD等镜像存储介质的分区信息(并非真正的磁盘分区,只是一个标号而已),可直接使用相关的命令就可以读取出各种文件系统类型的存储介质中的文件,使烧...
2024-05-31 阅读全文 →

u-boot2020.04移植(总结)

我所理解的u-boot移植可以分为以下几个部分:1、内核级的配置与初始化这个主要就是在start.S文件里面那些汇编代码,这部分呢我觉得基本上没有改的必要,除非你很熟悉内核相关的东西。2、SOC级别的配置与初始化这部分的内容是比较多的,而且可以说贯穿整个u-boot,但基本上必要的都集中在lowlevel_init,其它的就取决于你是否要在u-boot阶段使...
2024-05-31 阅读全文 →

u-boot2020.04移植(6、board_init_r)

点击下方阅读原文可访问文中超链接board_init_r和board_init_f差不多,都是执行一个循环,下面看下board_init_r干了些什么:/*common/board_r.c*/static init_fnc_t init_sequence_r[] = { initr_trace, initr_reloc, /* TODO: could x86...
2024-05-31 阅读全文 →

u-boot2020.04移植(5、u-boot重定位)

点击下方阅读原文可访问文中超链接如果想了解重定位是怎么一回事,可以参考这位老哥的博客:https://blog.csdn.net/skyflying2012/article/details/37660265第一阶段结束,便开始u-boot的重定位(这里有点小疑惑,在前面将u-boot从SD卡拷贝到DDR中时,我就是拷贝到链接地址的,也就是说那个时候u-boo...
2024-05-31 阅读全文 →

u-boot2020.04移植(4、board_init_f)

点击下方阅读原文可访问文中超链接接着上篇,执行了ldr pc, =_main后,就到arch/arm/lib/crt0.S文件了,本篇基本全是源码分析,是一个很枯燥的过程,如果你只想看修改的部分可直接搜索“修改”两个字,就能直接找到修改的地方,这个阶段只修改了三个地方:ENTRY(_main)/* * Set up initial C runtime env...
2024-05-31 阅读全文 →

u-boot2020.04移植(3、lowlevel_init.S)

点击下方阅读原文可访问文中超链接现在开始就进入板级相关的初始化了,跳转到board/samsung/goni/lowlevel_init.S文件,注意这里lowlevel_init搜索出来在arch/arm/cpu/armv7/lowlevel_init.S文件里面也有,而且这个文件还被编译了,但仔细看一下就会发现,这个文件里面的lowlevel_init被...
2024-05-31 阅读全文 →

u-boot2020.04移植(2、从链接脚本开始)

点击下方阅读原文可访问文中超链接首先分析一下u-boot的链接脚本,这样就能够知道u-boot本身的大体组成及分布,如果想更详细的了解,可以查看生成的u-boot.map文件,这个文件就能看出u-boot各个段的排布。在上一篇文章中,已经完成了u-boot的编译,在u-boot根目录下可以看到生成了一个u-boot.lds文件,这个文件就是u-boot的链接...
2024-05-31 阅读全文 →

u-boot2020.04移植(1、u-boot的编译)

点击文章下方阅读原文可访问文中超链接最近公司项目用到了xilinx的zynq7000 soc,开发方式有所不同,驱动的数据都是通过设备树来提供,以前没接触过,所以想系统的学习一下相关的内容,但是手头只有一块三星的s5pv210开发板,使用的u-boot和linux系统不支持设备树,只好自己移植,以此记录一下移植过程,加深理解与记忆,如果你也刚好有需要,欢迎参...
2024-05-31 阅读全文 →

如何使用C的volatile关键字

首先声明本文译自国外网站的一篇文章,原文链接如下:https://barrgroup.com/embedded-systems/how-to/c-volatile-keyword建议有条件的直接阅读英文原版。可能读了这篇文章后,你会有所怀疑,因为你平时可能遇到过下面出现的情况,但是你并没有添加volatile关键字,程序任然正常的运行,个人觉得可能有以下的原...
2024-05-31 阅读全文 →

C++20最重要的三个新特性

C++之父都说过,C++20是C++语言的一次重大变革,引入了大量的新特性。这其中个人认为最重要新特性是这三个:ModulesCoroutinesConceptsModules直接看代码:// helloworld.ixxexport module helloworld; // module declarationimport <iostream&gt...
2024-02-15 阅读全文 →

从C语言实现面向对象探究class的秘密

这里我想主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,我们再联想下,C++中的class的运行原理是什么?首先我们来写一段C++的class,拿一个Student类来举例子:在头文件中,我定义一个Student类:#pragma onceclass Student {public:  void SetNumbe...
2024-02-15 阅读全文 →

一场开发者的盛宴,你怎么能缺席?

在人工智能日益融合、异构及多架构的编程时代,如何进行跨架构的高性能与加速计算?属于开发者头脑风暴的时刻已经来临,通过技术创新将带来更高的开发能力。如果您是C++ 或 GPU 程序员、AI 开发人员、研究员或数据科学家,如果您对跨架构的高性能与加速计算感兴趣,那么您一定会从这个活动中有所收获。Intel将于10月19日北京时间9:30 – 17:30举行one...
2024-02-15 阅读全文 →

相比于C++23,我更期待C++26

十一之前我去参加了C++全球开发者大会,今天才有时间和大家分享下。听了C++之父的分享,C++之父聊了下他对C++23和C++26新标准的展望,如图:可以看到C++23的更新主要是提供协程库和模块标准库,都是在完善C++20引入的特性,其实没什么新的东西。然而说会在C++23引入的network和executors,也终于不出意外的延期到了C++26。可惜C...
2024-02-15 阅读全文 →

C语言如何实现面向对象

这里主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,再联想下,C++中的class的运行原理是什么?首先看一段C++的class,拿一个Student类来举例子:在头文件中,我定义一个Student类:#pragma onceclass Student {public:  void SetNumber(int n...
2024-02-15 阅读全文 →

DMA原理

DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果...
2024-02-15 阅读全文 →

这五个问题,你也想问吧

常常有读者问我:我不是科班出身,我工作经验不够丰富,新知识无法实践,面试的时候怎么快速证明自己的能力......该怎么办?以上问题我和很多同行都聊过,自己亲身也经历过,今天和大家分享下我的体会。非科班出身,怎么证明自己的实力?实话实说,在找工作方面,非科班出身不太占优势,我之前也和很多非科班出身的朋友聊过这个事,建议都是让他(她)想办法证明自己的能力,证明自...
2024-02-15 阅读全文 →

C++ 使用协程需要注意的问题

在异步操作里,如异步连接、异步读写之类的协程,co_await这些协程时需要注意线程切换的细节。以asio异步连接协程为例:class client {public:    client() {        ...
2024-02-15 阅读全文 →

C++ std::function的开销

经常看到说function的开销比较大,慎用function之类的讨论。那function究竟哪里开销大,我找到了一篇为function做profile的文章,这篇文章中的英文比较简单,我就不翻译了,英文吃力的朋友也可以直接看下面的数据:Popular folklore demands that you avoid std::function&nb...
2024-02-15 阅读全文 →

C++性能白皮书

最近看完了《C++性能白皮书》,这本书列出了一些性能优化的思路,不过只是一些指引,没有讲具体细节,我整理出了其中的关键点分享给大家:硬件篇作为一个程序员,想要性能优化,最好要了解些硬件,特别是CPU架构的一些知识点:流水线分支预测寄存器重命名数据预取指令重排和乱序执行同时多线程(超线程)数据并行 SIMD 单指令多数据还要了解CPU的特点...
2024-02-15 阅读全文 →

CPU Cache伪共享问题

先看下这两段代码:代码段1:const int row = 10240;const int col = 10240;int matrix[row][col];int TestRow() { //按行遍历 int sum_row = 0; for (int r = 0; r < row; r++) { for (int c = 0; c < col...
2024-02-15 阅读全文 →

C++ coroutine generator 实现笔记

本文授权自知乎用户IceBear,点击文末”阅读原文“查看原文章。C++20 给我们带来了非常现代化的协程特性,但是主要的增加都集中于语核部分。由于库特性尚未准备充分,所以 C++20 标准库中尚没有多少现成的、组装好的协程设施供我们使用。但是!仅仅通过使用 std::coroutine_handle (这是一个编译器为之开洞的类)并在你...
2024-02-15 阅读全文 →

Rust学习资料

最近在研究Rust,目前大多数项目都可以使用Rust开发,但是涉及到和其他语言交互,比如用Rust开发一个SDK,一般还是需要导出C接口。那如何将Rust导出C接口?Rust的FFI就是专门做这件事的。一个正常的Rust public接口长这样:pub fn hello_world() -> i32 { 20}如果要把一个Rust函数导出为C接口,需要...
2024-02-15 阅读全文 →

《计算机网络:自顶向下方法》全新第8版

20多年持续打磨,国际经典教材计算机网络:自顶向下方法 文末送书!Kurose和他的自顶向下方法就在最近,Kurose和Ross教授合著的《计算机网络:自顶向下方法》中文版也刚刚升级到了第8版,这是一本目前世界上使用最为广泛的网络教科书,书中倡导的方法就是目前最为流行的自頂向下方法。下面我们就深入地谈谈Kurose和他的自頂向下教学方法以及他的经典...
2024-02-15 阅读全文 →

百度工程师带你探秘C++内存管理(ptmalloc篇)

作者 | daydreamer前篇《探秘C++内存管理(理论篇)》主要介绍了Linux C++程序内存管理的理论基础,本文作为系列文章《探秘C++内存管理》的第二篇,将会探讨经典内存管理器ptmalloc如何管理C++程序的内存。借助剖析ptmalloc解决问题的着重点和设计实现成本的权衡,更具体的呈现c++内存管理面临的问题和工程落地中的巧思。一...
2024-02-15 阅读全文 →

Google为Chromium引入Rust?

今天的文章外部link比较多我特意整理了link的汇总需要的朋友可以在后台回复:“rust ”即可收到自动回复,更加方便观看------------------------------------------------------------------最近看到一篇Google的Blog:Google官宣要把Rust引进Chromium项目中。此举是为了加...
2024-02-15 阅读全文 →

constexpr

前面介绍了模板这种编译期动作,关于编译期动作,有必要介绍下constexpr。在这之前有必要简单提一下constexpr与const的关系,两者字面上都表达常量的意思。主要的区别是:const修饰的变量可以在运行时才初始化,而constexpr则一定会在编译期初始化。constexpr才是名符其实的常量,所有的constexpr都是const。而const表...
2024-02-15 阅读全文 →

用chatGPT生成C++代码

众所周知,chatGPT可以不依赖背景立即有效地回答不精确的问题。它提供带有工作代码的答案。一位美国的Telegram算法交易员,以其所在的项目组的实际问题进行了测试,问题如下:“有没有办法自动序列化Protobuf消息?就像以下内容:C++结构体->序列化为Protobuf消息结构体->发送到网络”chatGPT回复如下:如上所示chatGPT...
2024-02-15 阅读全文 →

操作系统:文件系统的实现

一、文件系统结构磁盘的逻辑单元为块,内存和磁盘之间的I/O传输以块为单位执行。磁盘的特点1可以原地重写,可以从磁盘上读一块儿,修改该块,并将它写回到原来的位置可以直接访问磁盘上的任意一块。因此,可以方便地按顺序或随机访问文件文件系统需要提供高效快捷磁盘访问,以便轻松存储、定位、提取数据。即存储文件、访问文件文件系统有两个不同的设计问题访问问题:如何定义文件系...
2024-02-15 阅读全文 →

20 张图带你全面了解 HTTPS 协议,再也不怕面试问到了!

本文详细介绍了 HTTPS 相较于 HTTP 更安全的原因,包括对称加密、非对称加密、完整性摘要、数字证书以及 SSL/TLS 握手等内容,图文并茂、理论与实战结合、建议收藏!1. 不安全的 HTTP近些年来,越来越多的网站使用 HTTPS 协议进行数据传输,原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。很多浏览器对于使用 HTTP 协议的...
2024-02-15 阅读全文 →

Boost:初体验,Log模块的编译与使用

大家应该都知道,Boost是个准标准库,一般Boost里比较先进的模块可能会进下一代的C++标准。因为我最近在开发Log相关的功能,所以业余时间也在看看市面上的Log模块是怎么设计的。关于Log,想必大多数C++开发都在使用glog或者spdlog,最近我发现Boost中也有个Log模块,于是看了看,发现功能好强大。Log模块整体设计如图:图片来源于:htt...
2024-02-15 阅读全文 →