
ARM
文章平均质量分 71
shenhuxi_yu
记录职业生涯
展开
-
ARM 异常返回地址
armv7与armv8异常返回地址的correction原创 2022-12-14 01:33:06 · 676 阅读 · 0 评论 -
arm64 虚拟地址物理地址转换
aarch64 pagetable walk 物理地址与虚拟地址转换原创 2022-11-11 16:16:08 · 1637 阅读 · 0 评论 -
armv7 tlb 概述
armv7上下文切换的tlb flush的时候为了减少开销,tlb 会有延迟刷新 lru 替换策略原创 2022-03-16 00:59:47 · 734 阅读 · 0 评论 -
zephyr 调度时机
Threads — Zephyr Project Documentationhttps://docs.zephyrproject.org/latest/reference/kernel/threads/index.html?highlight=preemptive#thread-prioritiesScheduling — Zephyr Project Documentationhttps://docs.zephyrproject.org/latest/reference/kernel/scheduling原创 2021-12-17 15:43:22 · 465 阅读 · 0 评论 -
linux mem overcommit
linux overcommit 机制会欺骗进程,承诺分配给他的内存空间,只有当这些page被真正touch到的时候才通过缺页机制拿到真正的物理内存。以下摘自kernel docThe Linux kernel supports the following overcommit handling modes0 - Heuristic overcommit handling. Obvious overcommits of address space are refused. Used fo.原创 2021-11-03 10:17:12 · 269 阅读 · 0 评论 -
ARM: How to Write a Bootloader
ARM: How to Write a BootloaderInformation in this knowledgebase article applies to:Keil MDK armcc or armclangQUESTIONHow can I write a bootloader correctly?ANSWERA bootloader is a piece of code which allows user application code to be updated.转载 2021-02-27 16:47:56 · 368 阅读 · 0 评论 -
arm linux iperf 局域网测速
aarch32 linux 4.14iperf 百科描述: Iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失服务端启动服务,作为server:sudo apt-get install iperfiperf -s -i 2每两秒间隔输出测试结果客户端启动服务,作为client:获取iperf source code https://sourceforge.net/project原创 2020-12-24 11:14:38 · 1010 阅读 · 0 评论 -
linux meminfo cache计算方式
aarch32 linux4.14static int meminfo_proc_show(struct seq_file *m, void *v) { struct sysinfo i;...... si_meminfo(&i); si_swapinfo(&i); cached = global_node_page_state(NR_FILE_PAGES) - total_swapcache_pages() - i.buf原创 2020-12-09 20:09:44 · 3501 阅读 · 0 评论 -
linux procps free mem计算与oom free mem计算
aarch32 linux 4.14 busybox-1.30经常使用free查看mem信息类似如下打印free 49 total used free shared buffers cachedMem: 239 189 49 0 0 65-/+ buffers/cache: 124 115...原创 2020-12-04 11:24:08 · 796 阅读 · 0 评论 -
交叉编译wpa-supplicant
https://blog.youkuaiyun.com/fangye945a/article/details/86658621http://distfiles.macports.org/openssl/http://www.infradead.org/~tgr/libnl/原创 2020-10-27 19:46:00 · 227 阅读 · 0 评论 -
jtag dump内存数据
aarch32 linux4.14 zynq-7000系统概率死机重启,关掉watchdog后,系统hang住,串口没打印任何异常log,且串口无法输入判断系统状态,camera中断中添加blink led操作,死机的时候中断无法操作,一般情况软件的crash,串口总会有些log打印的,很奇怪这个死机没有串口log打印出来,推测在中断中遇到BUG_ON或者crash,或者硬件导致(bus ...原创 2020-04-27 00:53:49 · 1571 阅读 · 0 评论 -
arm linux 生成火焰图
aarch32 arm-linux-gnueabihf-gcc linux4.9perf 工具 linux/tools/perf ./build.shperf 采集栈信息的linux支持CONFIG_PERF_EVENTS=yCONFIG_HW_PERF_EVENTS=y采集命令./perf record -F [sample freq]-p [pid]-g -- sle...原创 2020-04-01 17:58:27 · 1192 阅读 · 0 评论 -
gdb 调试不停出现Program received signal SIGTRAP
问题描述:gdb 调试zephyr程序的时候,之前下过的某个断点,monitor reset 后重新跑,竟然会一直触发这个断点,虽然b命令已经列出当前没有break point,一直卡在这里 continue 和 next 都走不下去问题解决:from stack overflow 的答案:Ok. Long answer: Hardware breakpoints are usu...原创 2020-03-21 15:26:42 · 5890 阅读 · 0 评论 -
gdb交叉编译与编译参数说明
下载can-utils源码后手动编译的步骤./configure CC=arm-linux-gnueabihf-gcc --target=arm-linux --host=arm-linuxbuild:执行代码编译的主机,自己的主机系统ubuntu会是x86_64-pc-linux-gnu。如果不做配置一般由config.guess来猜就可以。host:编译出来的二进制程序所执行的主机...原创 2020-01-14 16:43:18 · 1027 阅读 · 0 评论 -
insmod ko invalid module format [unknown relocation]
linux版本4.14 aarch32用如下出错版本的Makefile编译basic.ko,insmod ko到kernel后提示invalid module format, dmesg查看内核打印信息 basic: unknown relocation: 10出错的版本obj-m := basic.oARCH := arm CROSS_COMPILE := arm-linux-g...原创 2019-12-05 12:11:21 · 1437 阅读 · 0 评论 -
arm64 linux 执行elf32 提示no such file or directory
arm64 下执行另外一个平台编译的elf32 程序的时候文件存在但是系统仍然提示no such file or directory1、搜查网页大部分都是讲找不到so库文件用LD_LIBRARY_PATH指定好(export LD_LIBRARY_PATH 是修改全局的,LD_LIBRARY_PATH=/lib/test:/lib/run a.out 只对当前的执行文件有效),用ldd 或者...原创 2018-07-04 00:02:26 · 2231 阅读 · 0 评论 -
linux Coherent dma 实现
linux 4.9 armv8void *dma_alloc_coherent(struct device *dev, size_t size,dma_addr_t *dma_handle, gfp_t flag)参数:dev device 结构体中有dma相关的控制比如dma_mask,dma_handle 作实参传递返回的pa,flag分配memory时的控制选项比如GFP_KER...原创 2019-05-21 01:15:37 · 3144 阅读 · 2 评论 -
arm64 memory 属性 Device-nGnRnE
armv8 dump mmu table的时候有看到memory 属性Device-nGnRnE查阅armv8 trm得到如下信息,把memeory 分成两个类型device 与 normal, device 类型的memory的访问行为比较复杂,例如read clear, read inc addr(读同一个寄存器,实际会递增的去访问某一块memory),这些特性决定了cpu 不能像no...转载 2019-05-28 01:06:12 · 9516 阅读 · 1 评论 -
linux 临时页表
armv8 linux4.9查看dma map前后mmu page table的变化的时候,有看到有的page table entry映射了2M的size,这个2M的entry是何时建立的,目的是什么是这边博客要弄清楚的问题。arm64 定义页框大小的define位置如下,每一个页表项映射一个页框大小的范围,当前系统定义为4Klinux 内核空间的页表是在kernel 初始化时...原创 2019-06-02 23:10:43 · 409 阅读 · 0 评论 -
linux kmemleak false positive
linux4.9 aarch32用kmemleak scan 系统memleak的时候会有一堆的误报的memleak 的callstack,kmemleak 本身就存在这个缺陷这种误报称为 false positive(假阳性)用win10 自带的Ubuntu 用qemu 模拟memleak 做实验分析下什么样的情况会产生false positiveon going.........原创 2019-07-10 23:15:46 · 396 阅读 · 0 评论 -
gcc -fstack protector 原理
之前有次写驱动的时候自己挖了个坑把short类型的参数当int来用导致子函数返回时提示踩了stack protector 机制埋设的guard原创 2020-05-18 10:24:43 · 2457 阅读 · 0 评论 -
linux stack usage debug
from:https://elinux.org/Kernel_Small_Stacks静态检查elf的栈使用空间用kernel自带的checkstack.pl静态检查elf的调用深度第三方工具stack_size动态查看每个task的栈空间使用状况使用kernel config :CONFIG_DEBUG_STACK_USAGE详情如下:checkstack.plThe k...转载 2018-11-13 00:06:01 · 1697 阅读 · 2 评论 -
arm gic 中断控制器工作原理概述
linux pinctrl 里面有个gpio抽象的中断控制器与系统的gic中断控制器级联cascade阅读arm generic interrupter controller architecture specification,总结下支持的中断类型平常工作接触到的是ppi,sgi和spi,ppi和sgi是对某一个核的,spi是对所有核的,sgi一般是用来核间通信gic 的...原创 2018-07-21 19:46:08 · 5922 阅读 · 0 评论 -
arm64 linux bad mode Serror 系统异常
最近在linux4.9 arm64遇到了bad mode的kernel oopsoops的内容大概如下,而且oops过后看起来系统并没有异常,oops出现的概率比较小,而且每次oops打印的信息中task 都是不同的,oops之后,看起来大部分时候系统还是可以正常运行的[ 1259.654597] Bad mode in Error handler detected, code 0xb...原创 2018-07-26 00:14:38 · 13129 阅读 · 0 评论 -
linux iotable_init 静态映射与内核页表的建立
arm32 linux3.18 mach-vexpress常用的ioremap或者of_iomap都是动态映射,静态映射的接口是iotable_initvoid __init iotable_init(struct map_desc *io_desc, int nr)struct map_desc { unsigned long virtual; unsigned long p...原创 2018-07-19 00:32:00 · 1460 阅读 · 1 评论 -
linux platform driver with dts
遇到一个跟init顺序相关的问题,code结构大概如下,目的是用initcall的顺序来控制flag_a的相关的flowtest_a_init{ if(flag_a)......paltform_driver_register(&a_driver);}arch_initcall(test_a_init);b_probe{set_flag_a=1;}b_driver=...原创 2018-06-29 00:58:40 · 788 阅读 · 0 评论 -
arm linux userspace segment fault
偶尔遇到了个userspace的segment fault 的问题,从网上搜了下debug的方法环境是arm64 Linux4.9链接:https://www.doulos.com/knowhow/arm/Embedded_Linux_Debugging_User_Space_Seg_Faults/参照链接中的方法debug:1、异常的时候Linux dmesg 根本没打出来segfault 类似...原创 2018-07-06 00:00:43 · 536 阅读 · 0 评论 -
arm linux 启动后 can not find /dev/tty*
qemu + rootfs(buildroot) + linux3.18 实验环境搭建参考博客:https://blog.youkuaiyun.com/qq_24188351/article/details/77921653 (ntfs uboot 的方式没搞定) 运行起来后提示can not open /dev/ttyAMA0 no such file or directorygoogle 了下好像跟C...原创 2018-07-08 23:43:23 · 1571 阅读 · 1 评论 -
linux access_ok 用户指针检查
copy_from_user 与 copy_to_user 函数在使用使用user space指针的时候都会用access_ok 函数检查检查的内容:#define access_ok(type, addr, size) (__range_ok(addr, size) == 0)#define __range_ok(addr, size) ({ \ unsigned long flag, rok...原创 2018-06-24 15:42:43 · 4891 阅读 · 2 评论 -
linux arm64 nokaslr内核起始地址随机化
arm64 linux 支持内核起始地址随机化kallsymbols 得到的符号地址大都是编译阶段就可以决定的,决定于lds链接obj文件的顺序,编译生成obj时会把不同类型的变量放到固定的section内,如下实例 编译环境是cygwin64下的gcc:uboot 命令:addboot nokaslrlinux 命令: echo 1 > /proc/sys/kernel/kptr_rest...原创 2018-04-09 00:09:16 · 3002 阅读 · 0 评论 -
IIC中的open drain
漏极开路(Open Drain)即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻。———高阻状态:高阻状态是三态门电路的一种状态。逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路。电路分析时高阻态可做开路理解。可以把它看作输出(输入)电阻非常大。他的极限可以认为悬空。也就是说理论上高阻态不是悬空,而实际应用上与引脚...原创 2018-07-21 19:48:46 · 5564 阅读 · 2 评论 -
arm hardware breakpoint 与 watchpoint 原理
aarch32 linux4.9kernel 有breakpoint的编码实例data_breakpoint.c相关函数:register_wide_hw_breakpoint //kernel space 地址register_user_hw_breakpoint //user space 地址breakpoint 与watchpoint的原理需要查阅armv7_arch...原创 2018-10-18 23:56:12 · 4808 阅读 · 0 评论 -
linux mmap 底层原理
aarch32 linux3.18userspace 的mmap使用方法,mmap 用法如下void *mmap(void *start, size_t length, int prot, int flags,int fd, off_t offset);int munmap(void *start, size_t length);返回说明:成功执行时,mmap()返回被映射区...原创 2018-09-02 18:08:18 · 2633 阅读 · 0 评论 -
arm linux spin_lock 原理
aarch32 linux4.9 spin lock的目的是为了让cpu在等待资源的时候自旋在那里而不是去睡眠进行上下文切换,所以spin_lock中做的事情不能太多要不然反而会降低系统性能,事情的耗时数量级应该是数个tick,spi_lock相关的常用的api如下:static __always_inline void spin_lock(spinlock_t *lock)stat...原创 2018-08-25 01:31:38 · 1200 阅读 · 0 评论 -
arm linux vector_swi分析
linux 4.9 aarch32如下图中断、异常和系统调用的flow,中断一般是异步的硬件请求,异常通常是应用程序的错误触发,系统调用是应用程序对内核的功能请求发生swi后进入系统中断向量然后执行vector_swi,源代码分析如下(CONFIG_AEABI):/*========================================================...原创 2018-08-23 01:22:27 · 1537 阅读 · 2 评论 -
linux autosleep机制
aarch32 linux4.9常用的linux系统进入suspend的命令是echo mem > /sys/power/state,auto sleep的功能则是为了实现“Opportunistic suspend”即循环的监测到系统有没有wakeup_event如果没有就让系统suspend下去,auto_sleep会跟pm的wakeup source和wakeup count有相关...原创 2018-10-20 14:05:01 · 2232 阅读 · 0 评论 -
linux pm子系统分析
pm系统提供给userspace sysfs的接口如下cat /sys/power/state 系统当前支持的pm状态, pm状态有四个mem standby on freeze 每个状态的定义可以查看document/power/state.txt 文件echo mem > /sys/power/state 系统进入suspendecho 1 > /sys/p...原创 2018-08-26 14:06:38 · 3119 阅读 · 0 评论 -
arm linux 系统调用过程
在Linux下系统调用是用软中断实现的,下面以一个简单的open例子简要分析一下应用层的open是如何调用到内核中的sys_open的。t8.c 1: #include <stdio.h> 2: #include <sys/types.h> 3: #include <sys/stat.h> 4: #include <...转载 2018-08-16 16:57:35 · 1923 阅读 · 0 评论 -
arm linux dma_map_single原理
linux 3.0 arm11因为需要验证spi dma(IP内部)驱动的原因,使用了linux 3.0的spi子系统,并且实操了dma驱动,详情如下:spi_master->transfer 的实现中foreach spi_message中每个spi_transfer,判断transfer 的长度超过spi fifo buf的最大支持长度32byte的话就选用dma模式传送数据...原创 2018-08-15 00:57:53 · 20340 阅读 · 0 评论 -
linux copy_from_user实现原理
linux4.9 aarch32linux fixup table说明: http://cache.baiducontent.com/cm=9d78d513d99d1af31fa7837e7c428c2c5e1697634d91834521838448e2374c41362cf7fc677c1f5e95833e2616ae3a41f7b57337200357eccb979f4aaaeacf7...原创 2018-11-06 01:00:37 · 7262 阅读 · 0 评论