calltree

参考 使用calltree + graphviz生成C语言函数调用关系 借助调试器快速理解代码……

阅读全文

strace 实例分析

例子 test1.c #include <stdio.h> int main(int argc, char **argv) { printf("hello world\n"); return 0; } $ strace ./test1.out execve("./test1.out", ["./test1.out"], 0x7ffd55864680 /* 62 vars */) = 0 brk(NULL) = 0x5628470b5000 arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc7495aeb0) = -1 EINVAL (无效的参数) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (没有那个文件或目录) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=83237,……

阅读全文

嵌入式 Linux 按键驱动

设备树——按键节点 /* 节点 */ r_gpio_keys { /* 节点名称 */ compatible = "gpio-keys"; /* 节点属性 */ /* 子节点 */ sw4 { /* 子节点名称 */ /* 子节点的属性 */ label = "sw4"; linux,code = <KEY_RESTART>; gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>; }; }; 设备树节……

阅读全文

EasyMesh

学习流程 1905 –> Multi AP –> 运营商规范 文献 公开: 《IEEE Std 1905.1™-2013.pdf.pdf》 《Multi-AP_Specification_……

阅读全文

SPL 的由来,一切为了自举

ARM 的启动流程 bootRom –> SPL –> uboot –> kernel –> file system –> init 为什么要有 SPL ARM 的启动流程如上,其中有一阶段是 SPL,今天我们就来探究下,为什么要有 SPL ? CPU、内存、磁盘……

阅读全文

SPL 启动流程

版本 uboot-2018.07 u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /* 输出文件格式为 elf32-littlearm */ OUTPUT_ARCH(arm) /* 输出架构为 ARM */ ENTRY(_start) /* 指定整个程序的入口地址为 _start,这里跳转到 vector.S 执行 */ SECTIONS { /DISCARD/ : { *(.rel._secure*) } . = 0x00000000; /* 指定可……

阅读全文

树莓派直接操作寄存器来控制 LED

想法 之前在单片机上写过很多控制 GPIO 的代码,代码比较简单,也很好理解。同样的事情到了嵌入式 Linux 上似乎变得复杂了很多。这很不符合我的预期,我认为事物……

阅读全文