资源简介:文章目录常用接口request_mem_region函数release_mem_region函数ioremap函数iounmap函数在驱动中的使用点击下方阅读原文可访问文中超链接对于linux中的驱动来说,在操作硬件这个部分其实和在单片机中操作硬件几乎是一样的,不同的只是在linux中使用的是虚拟地址(如果开启了MMU),而在单片机中都是直接操作物理地址;在lin...
资源简介:文章目录udev与mdev配置mdev热插拔常用接口class_create函数class_destroy函数device_create函数device_destroy函数驱动中的修改点击下方阅读原文可访问文中超链接在之前的内容中,执行应用程序之前,都要手动使用mknod命令来创建设备节点,这种方法非常的不方便,实际上现在的内核已经提供了一些接口,加上一个用户空间程...
资源简介:文章目录设备号常用接口设备号申请/释放register_chrdev_region函数alloc_chrdev_region函数unregister_chrdev_region函数其它宏定义字符设备的定义cdev_alloc函数字符设备的绑定cdev_init函数字符设备注册/注销cdev_add函数cdev_del函数file_operations结构实现一个简单的字符设备驱动以前的接口register_chrdev函数unregi...
资源简介:文章目录需求搭建环境编写http客户端代码注意点测试结果点击下方阅读原文可访问文中超链接需求前面已经移植好了协议栈netx,也完成了UDP通信的测试,说明移植方面应该是没有其它什么问题了。准备开展后续的工作,因为需求的原因,我需要将板子作为http客户端来请求web服务器的数据,然后处理及显示。搭建环境开始时我打算用...
资源简介:文章目录一个最简单的驱动模块驱动编译的Makefile相关命令错误解决:点击下方阅读原文可访问文中超链接一个最简单的驱动模块一个精简的驱动模块可以只有不到10行的内容,如下是一个简单的测试程序。#include <linux/init.h>#include <linux/module.h>#define DEBUG(fmt, ...) \ do{ \ ...
资源简介:文章目录写在前面准备移植开始移植验证最后一点点击下方阅读原文可访问文中超链接写在前面ThreadX 是由 Express Logic 公司开发的实时操作系统。目前已被微软收购,并且前不久开源了,当开源的时候很多论坛都第一时间发布了相关文章,可见其影响力还是很不错的,刚好最近有一个新项目,需要用到网络协议栈,而threadx有自己...
资源简介:文章目录内核的下载生成配置文件编译解决错误启动内核配置u-boot的环境变量编译内核并启动注意点网络支持SD/MMC支持设备树的其它修改点击下方阅读原文可访问文中超链接内核的下载还是和u-boot移植的步骤差不多,首先是要选择一个版本,然后下载镜像,确保能够正确编译成功。对于版本的选择,因为我是学习用,所以选择较新的...
资源简介:文章目录重定位前的堆内存池那当我们使用malloc时,它是如何给我们分配内存的呢?以malloc为例再来看下重定位后结论点击下方阅读原文可访问文中超链接重定位前的堆内存池首先看一下重定位前,在重定位前也就是第一阶段,u-boot会保留一片内存用于堆,也就是gd->malloc_base这篇区域,其大小为0x400,具体见下面的内存图:图...
资源简介:前面基于goni这块板子移植的u-boot并不支持网络,但是我的开发板上面是支持网络的,所以这里把网络支持添加上。先看一下硬件是怎样接的:DM9000属于类内存总线的设备,被映射到s5pv210的SROM区域,从图上可以知道它接在SROM的bank1,CMD接在ADDR2。从前面的过程分析我们知道,网络相关的初始化在board_init_r阶段,有两个相...
资源简介:文章目录前奏流程驱动匹配分析需要的属性调试补充结果前奏随着u-boot版本的变迁,u-boot的功能也越来越多越来越强大,在较新的u-boot中已经支持很多不同类型的文件系统,告别了以前需要移植者自己手动规划eMMC/SD等镜像存储介质的分区信息(并非真正的磁盘分区,只是一个标号而已),可直接使用相关的命令就可以读取出各种...
资源简介:我所理解的u-boot移植可以分为以下几个部分:1、内核级的配置与初始化这个主要就是在start.S文件里面那些汇编代码,这部分呢我觉得基本上没有改的必要,除非你很熟悉内核相关的东西。2、SOC级别的配置与初始化这部分的内容是比较多的,而且可以说贯穿整个u-boot,但基本上必要的都集中在lowlevel_init,其它的就取决于你是...
资源简介:点击下方阅读原文可访问文中超链接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/PPC have this also perhaps? */#ifdef CONFIG_ARM initr_caches, /* Note: For Free...
资源简介:点击下方阅读原文可访问文中超链接如果想了解重定位是怎么一回事,可以参考这位老哥的博客:https://blog.csdn.net/skyflying2012/article/details/37660265第一阶段结束,便开始u-boot的重定位(这里有点小疑惑,在前面将u-boot从SD卡拷贝到DDR中时,我就是拷贝到链接地址的,也就是说那个时候u-boot的运行地址就和链接地...
资源简介:点击下方阅读原文可访问文中超链接接着上篇,执行了ldr pc, =_main后,就到arch/arm/lib/crt0.S文件了,本篇基本全是源码分析,是一个很枯燥的过程,如果你只想看修改的部分可直接搜索“修改”两个字,就能直接找到修改的地方,这个阶段只修改了三个地方:ENTRY(_main)/* * Set up initial C runtime environment and call ...
资源简介:点击下方阅读原文可访问文中超链接现在开始就进入板级相关的初始化了,跳转到board/samsung/goni/lowlevel_init.S文件,注意这里lowlevel_init搜索出来在arch/arm/cpu/armv7/lowlevel_init.S文件里面也有,而且这个文件还被编译了,但仔细看一下就会发现,这个文件里面的lowlevel_init被声明成了弱属性,所以真正调用的是bo...
资源简介:点击下方阅读原文可访问文中超链接首先分析一下u-boot的链接脚本,这样就能够知道u-boot本身的大体组成及分布,如果想更详细的了解,可以查看生成的u-boot.map文件,这个文件就能看出u-boot各个段的排布。在上一篇文章中,已经完成了u-boot的编译,在u-boot根目录下可以看到生成了一个u-boot.lds文件,这个文件就是u-boot的...
资源简介:点击文章下方阅读原文可访问文中超链接最近公司项目用到了xilinx的zynq7000 soc,开发方式有所不同,驱动的数据都是通过设备树来提供,以前没接触过,所以想系统的学习一下相关的内容,但是手头只有一块三星的s5pv210开发板,使用的u-boot和linux系统不支持设备树,只好自己移植,以此记录一下移植过程,加深理解与记忆,如...
资源简介:首先声明本文译自国外网站的一篇文章,原文链接如下:https://barrgroup.com/embedded-systems/how-to/c-volatile-keyword建议有条件的直接阅读英文原版。可能读了这篇文章后,你会有所怀疑,因为你平时可能遇到过下面出现的情况,但是你并没有添加volatile关键字,程序任然正常的运行,个人觉得可能有以下的原因:1.其实BU...
资源简介:C++之父都说过,C++20是C++语言的一次重大变革,引入了大量的新特性。这其中个人认为最重要新特性是这三个:ModulesCoroutinesConceptsModules直接看代码:// helloworld.ixxexport module helloworld; // module declarationimport <iostream>; // import declarationexport void hello() { // export decla...
资源简介:这里我想主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,我们再联想下,C++中的class的运行原理是什么?首先我们来写一段C++的class,拿一个Student类来举例子:在头文件中,我定义一个Student类:#pragma onceclass Student {public: void SetNumber(int number); void SetGrade(int gra...
资源简介:在人工智能日益融合、异构及多架构的编程时代,如何进行跨架构的高性能与加速计算?属于开发者头脑风暴的时刻已经来临,通过技术创新将带来更高的开发能力。如果您是C++ 或 GPU 程序员、AI 开发人员、研究员或数据科学家,如果您对跨架构的高性能与加速计算感兴趣,那么您一定会从这个活动中有所收获。Intel将于10月19日北...
资源简介:十一之前我去参加了C++全球开发者大会,今天才有时间和大家分享下。听了C++之父的分享,C++之父聊了下他对C++23和C++26新标准的展望,如图:可以看到C++23的更新主要是提供协程库和模块标准库,都是在完善C++20引入的特性,其实没什么新的东西。然而说会在C++23引入的network和executors,也终于不出意外的延期到了C++26。...
资源简介:这里主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,再联想下,C++中的class的运行原理是什么?首先看一段C++的class,拿一个Student类来举例子:在头文件中,我定义一个Student类:#pragma onceclass Student {public: void SetNumber(int number); void SetGrade(int grade); void P...
资源简介:DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说...
资源简介:常常有读者问我:我不是科班出身,我工作经验不够丰富,新知识无法实践,面试的时候怎么快速证明自己的能力......该怎么办?以上问题我和很多同行都聊过,自己亲身也经历过,今天和大家分享下我的体会。非科班出身,怎么证明自己的实力?实话实说,在找工作方面,非科班出身不太占优势,我之前也和很多非科班出身的朋友聊过...
资源简介:在异步操作里,如异步连接、异步读写之类的协程,co_await这些协程时需要注意线程切换的细节。以asio异步连接协程为例:class client {public: client() { thd_ = std::thread([this]{ io_ctx_.run(); }); } async_simple::coro::Lazy<boo...
资源简介:经常看到说function的开销比较大,慎用function之类的讨论。那function究竟哪里开销大,我找到了一篇为function做profile的文章,这篇文章中的英文比较简单,我就不翻译了,英文吃力的朋友也可以直接看下面的数据:Popular folklore demands that you avoid std::function if you care about performance.But is it reall...
资源简介:最近看完了《C++性能白皮书》,这本书列出了一些性能优化的思路,不过只是一些指引,没有讲具体细节,我整理出了其中的关键点分享给大家:硬件篇作为一个程序员,想要性能优化,最好要了解些硬件,特别是CPU架构的一些知识点:流水线分支预测寄存器重命名数据预取指令重排和乱序执行同时多线程(超线程)数据并行 SIMD 单...
资源简介:先看下这两段代码:代码段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; c++) { sum_row += matrix[r][c]; } } return sum_row;}代码段2:int TestCol() { //按列遍历 i...
资源简介:本文授权自知乎用户IceBear,点击文末”阅读原文“查看原文章。C++20 给我们带来了非常现代化的协程特性,但是主要的增加都集中于语核部分。由于库特性尚未准备充分,所以 C++20 标准库中尚没有多少现成的、组装好的协程设施供我们使用。但是!仅仅通过使用 std::coroutine_handle (这是一个编译器为之开洞的类)并在你...