前言 nrf52832想要开启蓝牙功能,比如蓝牙主从机功能,需要额外烧写蓝牙协议栈的固件:softdevice,换句话说,蓝牙协议栈等代码是不开放的,只提供一个二进制文件。 也就是nrf52832Flash与RAM要分区了,第一部分是蓝牙协议栈固件softdevice,第二部分是用户程序部分,分区不能重叠。 烧写蓝牙协议栈固件softdevice烧写方法 烧写方法大概有三种:win7系统上(很少见了),可以使用nrfgostudio,可惜win10上nrfgostudio无法工作 win10上烧写可以使用第二种:J-Flash烧写,也就是使用J-LinkJ-Link-OB烧写hex或者...

前言 最近在调试RT-Smart上的用户态mq(消息队列)时,遇到一个奇怪的问题,这个例程打印了一下获取的时间,就可以正常的工作(超时退出),否则,就一直卡住(无法超时) 虽然没有认真的阅读用户态mq的具体实现代码,大概能了解到底层对接了IPC消息队列,如果一直卡住,可能的原因是超时时间参数没有正确传递下? 排查思路 当前未采用qemu调试,直接使用板子验证,所以就手动增加了一些LOG,用户态应用与内核态的应用,很快定位到是内核代码software\kernel\components\libc\compilers\common\ctime.c中的函数rt_timespec_to_tic...

前言 最近翻箱,发现了两块几年前买的NRF52832与NRF52840的开发板,打算搭个BLE的开发环境 NRF52832与NRF51822之前用过,NRF52840没有用过,好像是BLE4与BLE5的区别吧 相关介绍 除了开发板,最重要的还是资料,至少需要了解开发板的原理图,这部分查找了一下,终于从网盘里面找了出来,之前购买开发板时,卖家把资料以网盘的方式发了过来,所以资料的【备份】确实很有必要。 我还是想多从官方了解更多,比如假设我只拿到了一个带原理图的开发板,如何一步步让它工作起来,熟悉各个模块,资料准备、环境搭建、工程编译、下载,各个功能的调试 nrf52系列,有较大的Flas...

前言 本篇继续研究musllibcldso的动态加载过程中遇到的关键性的概念:到底要加载ELF文件的哪些内容到内存 当前如果遇到ELF动态加载,当前系统需要有【文件系统】,并且有较大的内存,因为ELF文件是无法直接运行的,首先通过解析ELF头部获取入口函数,把需要载入到内存中的文件内容复制到指定内存区域,然后执行ELF的入口函数,通常不是ELF的main函数,而是更早的执行函数,如_start或者_dlstart函数。此时PC指针指向ELF加载的基地址+ELF入口函数。 ELF加载基地址 一个ELF文件,是否可以随意的加载? 当前验证发现:ELF文件包括我们通常见到的可以执行的文件,...

前言 最近再阅读Linuxion(一种内存分配管理)时,遇到了PAGE_ALIGN宏,这个宏到底是怎么工作的?【页对齐】时什么意思?页大小就是4096吗? 追踪PAGE_ALIGN 通过一步一步的追踪,终于了解了PAGE_ALIGN宏的最终展开定义。其实就是PAGE_SIZE对齐,Linux上默认是4096 源头:Linux内核drivers\staging\android\ion\ion_buffer.c->ion_buffer_alloc PAGE_ALIGN的定义include\linux\mm.h /toalignthepointertothe(next)pa...

前言 最近需要熟悉elf与共享库的链接与加载流程,需要先了解elf文件是怎么链接的,链接脚本如何阅读 最有效的方式是查看GNU官方的Linker(ld)文档,通过查找,这个Linker(ld)属于GNUbinutils,当前的较新的版本为:2.40 binutilsLinker(ld)文档 文档地址:https://sourceware.org/binutils/docs-2.40/ 可以下载pdf文档,或者查看在线的文档 binutilsLinker(ld)在线文档https://sourceware.org/binutils/docs-2.40/ld.html 较老版本文档 ...

orreq 阅读代码时,发现有个【组合指令】orreq,orr一般是OR,也就是或操作,后面加个eq表示什么呢? 比如下面的代码:前面一个操作,tst,好像没做实际的操作,可能影响了一些【状态位】 tst r3,1<<20 @checkwrite orreq r1,r1,1<<11 查阅arm汇编手册 当前通过ARM官方查找的InstructionSetAssemblyGuideforArmv7andearlierArmarchitecturesReferenceGuide,搜索了一下,发现有这个orreq的指令,主要是ORR指令,eq应该是个状态的后...

前言 muslldso是按照什么次序加载动态链接的应用程序的共享库的?如果共享库之间有依赖,muslldso如何处理先初始化哪个共享库? muslldso的代码可以在musl官方代码:ldso\dlstart.c与ldso\dynlink.c,其中动态库加载部分主要在ldso\dynlink.c中的load_library函数中实现。 动态库加载次序 当前muslldso加载次序与readelf-dxx.so依赖动态库列表显示的一致,这个加载次序是链接时的依赖库的次序。如果想调整这个次序,就调整链接时的各个依赖库的先后次序即可 动态库的加载次序,是按次序把依赖的动态库加载到内存,...

前言 在手动设置动态库的存放路径的情况下,发现muslldso依旧可以加载位于/lib目录下的动态共享库 动态库的存放路径或者说搜索路径,是否可以手动配置?比如Linux上有个配置文件可以配置,可以改变动态库的搜索次序,muslldso是否也可以做到这一点? 搜索路径 通过查看musl的代码:ldso\dynlink.c中的load_library函数中实现,了解到,musl的动态库默认是以lib作为前缀的,并且不能使用系统预留的动态库名字,比如libc.so muslldso通过应用程序的动态库依赖列表获取依赖的动态库名字,大部分是没有路径的。 下面是动态库路径的处理: ...

问题描述 最近在使用虚拟机ubuntu20.04编译muslgcc工具链时,遇到一个奇怪的问题,编译过程中异常退出,清理了多次重新编译,发现编译报错提示的信息是internalcompilererror:Segmentationfault 由于之前是可以正常编译的,所以怀疑编译环境造成的 解决方法 初步重启ubuntu可以解决,不过做了一些操作后,再编译,就发现又不行了,这到底是存在问题 经过搜索Segmentationfault解决方法,自己初步总结了一下: 问题的根本原因除了内存不足(free查看),主要的原因是openfile文件描述符限制问题,因为在编译大型软件,尤其是gcc...

前言 RT-Smart应用(apps)开发环境,ubuntu20.04+win10VSCode 最近在调试一个问题,需要使用FILE的fopen、fread等去读取处理一个大文件,为了尽快复现验证问题,随手搜了一下fopen等几个API的用法,调试时闹出来一个【笑话】,程序运行所到之处,把处理过的本地文件清空了。 当时初步的目标只是使用stat去获取一个文件的大小,现象就是0 获取文件大小 如何在用户态获取文件大小,RT-Smart的应用开发与Linux的用户应用开发基本类似,Linux平台上的应用,可以轻松的移植到RT-Smart上。 fopen可以在RT-Smart内核态使用,也可...

前言 musl是一个轻量级的标准C库,建立在系统调用之上,可以认为是【用户态】的C库,与glibc或者uClibc属于同一类。 基于musl的gcc工具链包括交叉编译工具链,可以用于编译Linux或者其他的操作系统,如当前Lite-OS、RT-Smart上都采用muslgcc作为编译工具链,使用musllibc作为用户态应用的C库。 musl基于MIT授权,开源、轻量、免费,估计越来越多的操作系统开始采用musl作为标准C库 最近也一直在研究musllibc的ldso,也就是动态加载功能,musl的动态加载功能集成在musllibc.so中。 elf格式文件 musl本身集成了动态加载...

相关文章 FreeRTOSqemumps2-an385bsp移植制作:环境搭建篇 开发环境 Win1064位+VSCode,ssh远程连接ubuntu VMwareWorkstationPro16+Ubuntu20.04 FreeRTOSv202212.01(备注:可以在github获取最新版本) qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高 armgcc交叉编译工具链:当前使用gcc编译环境,gcc-arm-11.2-2022.02-x86_64-arm-none-eabi,gccversion11....

前言 前面搭建了基于RT-ThreadBSPqemu-virt64-aarch64的开发编译环境,接下来开启rt-smart,确认是否可以正常工作 开启rt-smart 经过初步的验证,发现qemu-virt64-aarch64开启rt-smart,只需要scons--menuconfig图形配置界面下,使能rt-smart配置即可 配置使能RT-ThreadSmart选项后,保存,编译,重新运行qemu.sh,发现rt-smart已经可以成功运行 发现增加了一些rt-smart下特有的shell命令,如下 list_channel list_process list_sh...

  5i1sl39TVt1E   2023年11月02日   49   0   0 smartRT-Thread

前言 前面记录了VSCode可以通过SSH远程连接ubuntuLinux主机,比如代码放在远程ubuntu主机上,windows端VSCode通过ssh远程连接ubuntu,并打开远程主机上的代码 如果不设置authorized_keys,每次切换目录都需要输入一次密码,比较的麻烦 ssh生成密钥 也就是VSCode通过ssh远程连接ubuntu主机时,不需要再输入ssh登录密码 首先当前主机windows与远程主机ubuntu上都安装Git软件 windows上打开git的控制台,生成ssh密钥,如果使用过git,应该密钥已经生成过了,不需要再次生成。 windows上生成密钥...

  5i1sl39TVt1E   2023年11月02日   41   0   0 Ubuntu免密Codelinuxssh

开发环境 Win1064位+VSCode,ssh远程连接ubuntu VMwareWorkstationPro16+Ubuntu20.04 FreeRTOSv202212.01(备注:可以在github获取最新版本) qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高 armgcc交叉编译工具链:当前使用gcc编译环境,gcc-arm-11.2-2022.02-x86_64-arm-none-eabi,gccversion11.2.120220111 前言 前面的FreeRTOSqemumps2-an3...

  5i1sl39TVt1E   2023年11月02日   41   0   0 qemu#includeFreeRTOS#define串口

开发环境 Win1064位+VSCode,ssh远程连接ubuntu VMwareWorkstationPro16+Ubuntu20.04 FreeRTOSv202212.01(备注:可以在github获取最新版本) qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高 armgcc交叉编译工具链:当前使用gcc编译环境,gcc-arm-11.2-2022.02-x86_64-arm-none-eabi,gccversion11.2.120220111 前言 FreeRTOS当前支持qemumps2-an3...

  5i1sl39TVt1E   2023年11月02日   34   0   0 SourceCorebspqemuFreeRTOS

开发环境 Win1064位+VSCode,ssh远程连接ubuntu VMwareWorkstationPro16+Ubuntu20.04 FreeRTOSv202212.01(备注:可以在github获取最新版本) qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高 armgcc交叉编译工具链:当前使用gcc编译环境,gcc-arm-11.2-2022.02-x86_64-arm-none-eabi,gccversion11.2.120220111 前言 前面的FreeRTOSqemumps2-an38...

  5i1sl39TVt1E   2023年11月02日   56   0   0 mps2#includeqemuFreeRTOS#define
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~