arm
小陆zi
邊工作,邊學習。
展开
-
Vsomeip交叉编译(AARCH64)中涉及到的boost移植
最近在做arm交叉编译,其中需要用到boost库。问题随之而来,记录一下细节以及网上文章疏忽的知识点。 1,boost中的版本不同,导致头文件中的内容也有所不同。所以当移植库使用了boost,一定要注意boost的版本。 vsomeip中使用的boost库是要求大于等于boost 1.55,随后在host为x86的主机上也使用过boo...原创 2019-11-29 12:59:01 · 6212 阅读 · 5 评论 -
ARM 中断状态和SVC状态的堆栈切换 (异常)
ARM 中断状态和SVC状态的堆栈切换 (异常) 基础知识:Arm的寄存器使用规则以及寻址指令:R13 Sp 堆栈寄存器R14 Lr 连接寄存器R15 PC 程序计数器 多寄存器寻址:LDMIA R0!,{R1-R4}执行以后的效果R1 R2 R3 R4 堆栈寻址:STMFD入栈指令,相当于原创 2013-07-07 01:23:04 · 21282 阅读 · 0 评论 -
arm 多寄存器存取使用
老是忘记一些指令的用法... ... 索性记下来,便于以后再查。就当是学习笔记了。多寄存器和堆栈寻址的用法:多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB;堆栈寻址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;指令后缀的解释:弄清堆栈寻址的SP的变化:LDM转载 2013-07-01 02:13:22 · 1846 阅读 · 0 评论 -
MMU 存储访问控制
关于MMU的地址转换和页表的映射网上已经有了很多的文章。确实写得很好,获益匪浅。在这篇文章中只要记录和描述MMU中关于权限访问的控制。 1,MMU对段和页进行保护,在保护过程中区分了权限。它是由域的访问控制字段和一级描述符或二级描述符中的AP字段,以及C1寄存器的S(表示system),R(表示rom)控制位来共同决定的。MMU中的域是指的一些段,大页或者小页的集合。ARM支持最多16个域原创 2014-06-03 15:20:38 · 3065 阅读 · 0 评论 -
ARM-Linux (临时,正式) 建立页表的比较
很久没有写博客了,由于之前的写关于OMAP3530文章还没有整理。再加上一直在找工作,找到工作后又投入到另外的平台去工作。始终在忙忙碌碌,但是对于代码确实渐渐疏远。在做项目的时候要使用DDR3分配内存,不经意间使用要和MMU以及TLB打交道。因此特地写下这篇文章以备后用。(工作就是在和遗忘作斗争)! Linux在启动之初会建立临时页表,但是在start_kern原创 2014-09-01 00:34:43 · 4256 阅读 · 1 评论 -
strncpy 引起的思考,重新认识了strncpy这个函数
首先来看一个司空见惯的c语言列子:#include #include int main(){ unsigned char arry[] = {0x00,0x01,0x02,0x03}; unsigned char dest[] = {0xff,0xff,0xff,0xff}; strncpy(dest,arry,sizeof(arry));原创 2015-07-29 21:41:47 · 1659 阅读 · 1 评论 -
OMAP3 DSS 初始化过程(1)总线关系
1,调用流程omap_dss_bus_register()注册一个总线:static struct bus_type dss_bus_type = {.name = "omapdss",.match = dss_bus_match,.dev_attrs = default_dev_attrs,.drv_attrs = default_drv_attrs,};取名为o原创 2016-01-27 01:54:59 · 1577 阅读 · 0 评论 -
OMAP3 DSS 初始化过程(2)总线关系
这篇文章是对前面一片文章的补充。在文章(1)中遗漏了一些重要信息,而这些信息也是在随后的调试和修改过程中发现的。这里再做一次总结。还是那句老话,如有不足,请指出文章中错误的观点。 文章(1)中提到了omap_dss_register_device和omap_dss_register_driver这两个函数,这两个函数正是通过dss_bus总线进行配对的。在这两个函数配对之还有一个linu原创 2016-02-01 23:15:16 · 1452 阅读 · 0 评论 -
Mmap 实现原理和应用(流程)
在调试完达芬奇的视屏输入后记录一下调试心得。重点还是再次放在系统调用mmap后的内存分配上。做了一个mmap系统调用的笔记以及记录以备后用。大致介绍了linux中对于mmap的应用以及后续产生缺页异常处理的一个流程。由于之前的调试中一直对于vma的区域选取产生疑问,不知道vma到底是何许人也,这次有机会就直接mmap调试了。一下内容都通过log信息验证。 系统调用 mmap后SYS原创 2016-07-27 15:57:26 · 2707 阅读 · 0 评论 -
多线程的exit()逻辑
今天很巧再一次调试了多线程的代码。主要思想就是:通过pthread_create创建一个线程,然后通过主线程A控制创建出来的线程B,完成各种功能。video_thread(){while(){display();}exit(0);}main(){pthread_create(&video,,video_thread,);while(q原创 2016-10-28 05:35:01 · 5186 阅读 · 1 评论 -
linux内核中内存分配调用API-引起的一些思考
linux内存管理中的一些理解原创 2016-10-19 16:39:45 · 1304 阅读 · 0 评论 -
DMA:mem-to-mem mem-to-device device-to-mem
换了工作,算是步入汽车行业了。汽车不同于消费类电子,使用的是"高性能单片机",尽管物理通讯方式为:can lin spi 这些相对与消费类电子比较慢速的外设,但是AutoSar规范定义的比较详细。 刚开始接触"高性能单片机"。不知道怎么定义这样的芯片,有着200MHz的主频(甚至是多核)但是没有MMU。作为单片机类型的,所以称之为:高性能单片机。(不知道怎么描述,这些芯片多数用于汽车...原创 2018-03-17 11:46:12 · 1565 阅读 · 0 评论 -
Mmap的实现原理和应用
很多文章分析了mmap的实现原理。从代码的逻辑来分析,总是觉没有把mmap后读写映射区域和普通的read/write联系起来。不得不产生疑问:1,普通的read/write和mmap后的映射区域的读写到底有什么区别。2, 为什么有时候会选择mmap而放弃普通的read/write。3,如果文章中的内容有不对是或者是不妥的地方,欢迎大家指正。 围绕着这两个问题分析一下,其实在考虑原创 2013-02-23 00:02:30 · 23667 阅读 · 12 评论 -
Kernel Linker Scripts Analysis (ARM Architecture)
1. arch/arm/kernel/vmlinux.lds的生成:顶层的vmlinux是由arch/arm/kernel/vmlinux.lds链接生成,顶层Makefile里面定义:693 vmlinux-lds := arch/$(SRCARCH)/kernel/vmlinux.lds arch/arm/kernel/vmlinux.lds是由arch/arm/kernel转载 2013-01-28 21:45:40 · 1269 阅读 · 0 评论 -
linux设备管理-dev目录下创建和寻找某一设备文件
这是一篇网上找到的文章分析的很精彩,这篇文章的分析基于网络高手文章中没有介绍的方面。如果有什么不对的地方,请指正。谢谢file_operations流程跟踪术语描述符:其实就是结构体在linux可以把设备看作文件并提供了和文件一样的统一的访问接口,相信大家已经有了一点的了解,其底层对设备的不同操作主要是由file_operations描述符来控制,其封装了各种设备的原创 2012-11-18 04:10:02 · 5538 阅读 · 0 评论 -
omap 3530 boot i2c 调试笔记
1,板子时omap的,外设TPS65930的控制接口是I2C的。借此机会调试一下I2C的功能。如果有什么地方没有分析周到的,还请大家指正。I2C的驱动接触过,但是都是在u-boot或是在“裸奔”的环境中调试。这样的环境往往更注重硬件的特性,以及硬件的功能。软件架构相对较为简单。但是“简单”并不是说容易。想要单靠一些简单的设备,比如示波器,稳压电源,赤手空拳的写出最精简的驱动,未必是一件容易的事原创 2012-06-22 22:43:48 · 2975 阅读 · 0 评论 -
omap 3530 kernel i2c 调试笔记
i2c一次完整的驱动读写 结合调试过程分析,加上打印信息更加直观。 文件:drivers/i2c/busses/i2c-omap.c所有的调试代码以及注释都写在了这个文件中。以下主要是以文字记录了调试的过程以及一些疑问。在最后的分析中结合了其他芯片的操作。还是得到了一定的解释。这里把所有的想法直接记录在.c文件中。 omap_i2c_xfer_msg 4300x54原创 2012-06-22 22:48:58 · 1945 阅读 · 0 评论 -
Linux内核的同步机制:completion
在Linux内核中,completion是一种简单的同步机制,标志"things may proceed"。要使用completion,必须在文件中包含,同时创建一个类型为 structcompletion的变量。这个变量可以静态地声明和初始化:DECLARE_COMPLETION(my_comp);或者动态初始化:struct completionmy_comp;init_com转载 2012-07-12 16:31:28 · 1629 阅读 · 1 评论 -
nand flash 读写(基本操作)
开场白: 希望通过这篇文章记录一下自己在调试NAND flash的经验。希望对大家有用。 上个月搞了一块开发板QT210。说实话没有找到很多的datasheet就开始搞了。最早还是从boot说起,说到这这里不得不提到boot中打印的错误信息 ****CRC Error*****。最后还是决定静心调试看看怎么回事。结果发现资料还是确少,怎么办?找了以前的omap开发板。(个人觉得原创 2012-08-18 15:40:49 · 9327 阅读 · 0 评论 -
insmod 内核模块时参数传递 应用篇
内核模块参数传递 在看omap vout.c 的模块时候发现了一些关于LCD和输出的参数是由u-boot中的命令行传递而来。分析一下内核模块的参数传递问题。究竟是如何实现的。以下内容来自于:http://blog.21ic.com/user1/5593/archives/2010/66420.html 对于如何向模块传递参数,Linux kernel 提供了一个转载 2012-08-23 00:09:14 · 6314 阅读 · 0 评论 -
根文件系统的启动及配置linuxrc - linuxrc又来以及解释
一、内核启动完之后,首先运行/linuxrc。/linuxrc内容:#!/bin/sh echo "mount /etc as ramfs" /bin/mount -n -t ramfs ramfs /etc /bin/cp -a /mnt/yaffs/etc/* /etc //关机的时候我们会保存/etc的内容到/mnt/yaffs/etc.转载 2012-09-09 03:31:09 · 1946 阅读 · 0 评论 -
编译器如何决定变量长度
接着自己发布的一段code 就是强制转换后的指针变量将会方位不同长度的内存变量。后来又想到一个问题: int a 是32位 char a 是8 位 那么在32位的变量处理上和8位的变量处理上会有什么区别? 其实主要想要搞明白对于一个已知位宽的芯片来说(32位),怎么区分写到寄存器或是外设上的数据是使用了低16位,还是低8位,还是32位。原创 2012-08-25 15:57:01 · 1426 阅读 · 0 评论 -
Omap 3530 SDRAM 控制器初始化的一些思考
文章中有不足之处,请高手指点。希望有兴趣的读者交流讨论。谢谢名词解释SDRC : OMAP 3530内存接口控制器。1,DDR SDRAM 原理: DDR SDRAM 的原理在网上有很多精彩的分析,在这里不再一一复述。但是觉得比较经典的理论莫过于:以下是来自网上一篇精彩的分析http://hi.baidu.com/dark_hc/blog/item/217dd58f335a84原创 2012-09-09 03:52:10 · 2094 阅读 · 0 评论 -
从sd卡启动之文件系统制作
在调试andriod的代码时候发现了一个问题。在andriod调试的时候无法进入常规的文件系统进行简单的操作。由于想要把alsa移植到210的开发板中,发现“/”文件系统是无法进行读写的。在根文件系统下有一个system的目录可以进行读写但是执行命令的时候发现无法操作,顾想到了可读写的文件系统的移植。因此记录下来这篇文章以便后用,也为了遇到相同问题的开发者提供微薄的帮助。 1,fdisk原创 2012-10-05 22:15:17 · 7050 阅读 · 0 评论 -
load_elf_binary中使用的内存映射机制
load binary 中使用到的内存映射机制 研究了半天的exec函数后发现,所谓的load binary不是load(read 函数)而是重新安排的过程,在这个过程中涉及了很多的vm操作,找到一篇的好的文章。接下来看看高手的分析: 当某个程序的映象开始执行时,可执行映象必须装入到进程的虚拟地址空间。如果该进程用到了任何一个共享库,则共享库也必须装入到进程的虚拟地址空间。由此可看转载 2012-09-20 02:23:21 · 4103 阅读 · 0 评论 -
arm-gdb移植(编译)
调试应用程序的时候最好有调试工具类似于PC机上的GDB和DDD。写这篇文章的原因也是想要调试应用程序,所以决心自己作一次开发板上GDB的移植。网上相关的文档很多。也很精辟,在这里做一个汇总,以备后用。 GDB移植:GDB移植其实分为两种,两种方法的的区分是鉴于使用和编译后的工具而言。1,第一种是 开发板上使用ARM版的GDB,就像PC机上使用GDB。2,第二种是 开发板上使原创 2012-11-18 04:19:44 · 6938 阅读 · 0 评论 -
arm上电后的第一条指令
类似的文章网上很多了,大都以软件分析为主,从U-boot到kernel。很多文章的分析也是非常详细以及精辟的。在这里,不想多说软件的机制,那样的机会留给大家吧。 记得07-08年一次去华为面试,主考官问了一些nand flash的操作的事宜,也算还好,没有太多刁难。面试结果还是没有被录取,这里有很多因素,有自己的,也有对方的。记得在面试的时候考官问了一个问题,flash的读写原创 2012-06-19 23:30:51 · 5077 阅读 · 0 评论