flyleaf91 / RaspberryPi

分析树莓派的启动、工作原理,借鉴其软件架构设计上的优点。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

README

树莓派应该算是目前开源硬件里学习嵌入式Linux系统最好的工具,里面的设计思路和一些工具是很值得借鉴的,这里主要使用Raspberry Pi ZERO W和Raspberry Pi 4B进行系统架构分析。

之前在使用树莓派的过程中有记录一些东西,不过没有进行全面系统性的分析,相对比较零散。

博客园 - 随笔分类 - Raspberry Pi

ZERO W接口原理图

docs/images/RPI_Zero_W_40_Pin.png

参考文档

笔记文档

NO. 文件名称 摘要
0187 Userspace_Backtrace.md 用户空间函数调用栈,便于分析代码运行流程
0186 ROS_tf_turtle.md 学习坐标变换实际运用方法
0185 Android_jni_log.md Android jni log使用方法
0184 Kernel_dump_stack.md 利用内核的dump_stack()快速理清tty设备函数调用关系
0183 ROS_usb_cam.md 尝试一下ROS USB Camear获取图像
0182 Screen_Capture.md 截屏,有图有真相
0181 Jar_Decompiler_Java.md 将Jar包装成Java文件,方便检索代码
0180 DMA.md DMA工作原理及Linux下DMA实际使用
0179 Android_HIDL.md 突然想再弄一下HIDL,总感觉以前漏了啥 :)
0178 lsof.md lsof(list open files)是一个查看当前系统文件的工具。查看设备节点占用情况。
0177 BT_HCI_Command.md 理解蓝牙HCI命令格式,看懂QBQ认证HCI测试命令
0176 USB_gadget_serial_configfs.md 分析Android USB gadget串口配置
0175 SELinux_audit2allow.md 使用audit2allow处理avc权限
0174 Android_CMD_gtest.md gtest单元测试so库
0173 Hardware_Interrupts_Counter.md 通过硬件中断统计,可以查看中断是否发生,驱动查看中断触发判定一些信息
0172 tcp_dump.md TCP Server抓包
0171 Windows_ls.md 习惯了Linux,在Windows支持ls命令
0170 Android_cc-test.md 分析如何利用Android的cc-test
0169 Android_RefBase_sp_wp.md 理解Android强指针、弱指针,将sp、wp理解为RefBase的容器更好理解
0168 gtest.md 尝试使用gtest,便于以后分析Android底层test case
0167 eth0_dhcp_Server.md 搭建dhcp服务用于测试
0166 Windows_SMB_4_iPhone.md 将iPhone中的视频和照片共享出来
0165 Flask_OpenCV_Face_Detect.md Flask作为HTTP视频流,OpenCV识别摄像头采集的人脸
0164 Led_Button.md Led&Button板控制
0163 esp-who.md 搭建esp-who环境,测试web camera
0162 ESP32_BREDR_SPP_Server.md 理解BlueDroid(Fluoride)蓝牙协议栈,分析BREDR SPP Server工作原理
0161 ESP32-MicroPython.md 感觉MicroPython做玩具还是挺不错的选择,不用交叉编译,直接调试逻辑
0160 ESP32_BLE_SPP_Server.md 理解BlueDroid(Fluoride)蓝牙协议栈,为了理解Android蓝牙协议栈,分析BLE SPP Server工作原理
0159 pip_source_modify.md pip安装软件的时候经常会出现超时导致无法安装
0158 ESP32-DevKitC.md 尝试用树莓派处理ESP32-DevKitC
0157 sha256_init_update_final.md sha256是可以分批处理输入的,满足数据不是一次性处理完的场合
0156 Bluetooth_Core_Analyse_Pair_Bond.md 了解蓝牙配对流程到底那里来的,谁规定的,在哪里看
0155 Fastboot_flash_Sparse_Image.md 分析fastboot命令flash文件原理,理解sparse image原理
0154 CC2541_SimpleBLEPeripheral.md 理解单片机中的Bluetooth GATT到底是怎么工作的
0153 btmon_HCI_ACL.md 理解Bluetooth HCI及BTSnoop是什么
0152 Deep_Sleep.md 深睡眠机制,貌似树莓派上没使用
0151 Ubuntu_PCIe_Driver.md 尝试一下以前的PCIe卡在X86机器上跑起来
0150 BlueZ.md 可用于测试Android蓝牙通信或者协议栈修改,譬如安全方面的修改,理解just_works
0149 Linux_Lock.md 常见的几种内核驱动涉及的锁,理解原子操作比较重要
0148 ARM_SWI.md SWI指令引起软件中断异常,为操作系统应用程序调用系统接口提供的一种机制
0147 Android_AVB_vbmeta_public_key.md Android AVB启动vbmeta如何确保安全?
0146 printf_Hex_Format.md 进行二进制数据查看的时候常用的16 byte对齐输出参考
0145 Makefile_Assignment.md Makefile赋值=/:=/?=/+=区别
0144 Multiple_Project_Auto_Dir.md 解决多个Android BSP源代基准目录跳转问题
0143 Process_Swith.md 如果每个进程地址空间都是4G,MMU做虚拟地址映射,每次进程切换都要切换映射表?
0142 Kernel_Float_Calculation.md 内核浮点运算
0141 ARMv8_backtrace_Analysis.md ARMv8汇编分析,Android backtrace分析
0140 ARM_CPU_Refer_Docs.md CPU方面的一些文档参考
0139 Linux_Splice.md 理解零拷贝有助于理解Android Binder通信
0138 Wifi_Beacon.md Wifi的心跳包
0137 dmesg_grep_realtime.md 像logcat那样看内核log
0136 Wifi_Strength_RSSI.md Wifi信号强度RSSI(Received Signal Strength Indication)
0135 Android_fstrace.md Android下如何使用ftrace
0134 Capture_ftrace_event.md 手动操作一下获取ftrace event并转换到kernelshark显示
0133 Wireshark_Bluetooth_HCI.md 使用Wireshark分析BT HCI(类比到Wifi nl80211)
0132 Qemu.md 尝试一下Qemu启动init文件系统
0131 OP-TEE.md 理解OP-TEE工作原理
0130 sftp_transfer_file.md sftp上传文件
0129 RK_jar_unpack_pack.md RK镜像及Jar打包、解包
0128 John.md 学习John破解密码怎么做的
0127 HTTPS_SSL_Server_Client.md 尝试搭建自己签名服务器和访问的证书
0126 crontab_timer_for_build.md Linux定时编译任务,针对git
0125 git_staged_patch.md 一些git补丁、撤销方法
0124 pyusb_MTK_PL_Mode.md 分析MTK PL Mode选择
0123 Write_Sort.md 以前确实没怎么关注算法,学习一下算法,列一下写一个算法的基本架构
0122 RSA_Modulus_Exponent_Decrypt.md 论证芯片签名、验签基本流程示例
0121 RSA_HTTP_Sign.md 利用HTTP请求来对HASH数进行签名
0120 Python_C_Get_Shell_env.md 在处理Android编译镜像签名的时候用于区分环境
0119 OpenSSL_C_Example.md 学习OpenSSL的使用
0118 Wifi_rfkill_off.md 默认Wifi打不开,rfkill关闭了,暂时不知道原因
0117 Jenkins.md 用Jenkins来定时编译源代码
0116 pyc_decompile_to_py.md Python pyc反编译成py
0115 Openssl_RSA_Hash_Sign.md RAS Hash签名、验签
0114 Wifi_BSSID.md 查看特定Wifi AP的BSSID(MAC ADDRESS)
0113 MMU_Cache_VA_PA.md 内存管理中的MMC Cache相关知识
0112 mkdtimg.md 将Android的mkdtimg移植到树莓派上做dtbo.img验证工具
0111 Windows_Terminal.md 使用好看一点的Windows Terminal
0110 repo_GitHub_Booster.md repo使用及GitHub加速
0109 alias.md 终端命令快捷方式
0108 dkms.md Dynamic Kernel Module Support
0107 Windows10_Mount_ext4.md 重新制作系统SD卡的时候,Windows打开ext4文件系统直接配置系统还是挺重要的
0106 Source_Compare_Tools.md 对比源代码工具Beyond CompareWinMerge
0105 mirror_apt_source.md 默认的源update有点慢
0104 Android_RefBase_sp_wp.md 本来想把Android RefBase sp wp移到RPI上使用,暂时不行
0103 fs_modify_for_developer.md 常用的文件系统默认修改
0102 WM8960.md 分析声卡WM8960
0101 AHRS.md AHRS俗称航姿参考系统,AHRS由加速度计,磁场计,陀螺仪构成,AHRS的真正参考来自于地球的重力场和地球的磁场
0100 Kernel_DEBUG_Macro.md 内核模块DEBUG宏,和Android里面的NODEBUG宏一样
0099 socketpair.md socketpair用于创建一对无名的、相互连接的套接字,于进程间通信。
0098 QTTabBar.md Windows文件夹工具,配合battool打开文件夹,防遗忘
0097 Kernel_Complete.md 理解内核Complete同步机制
0096 Kernel_Notifier.md 理解内核通知
0095 Kernel_Tools_Compile.md 仅仅尝试一下编译,暂时不知道用来干啥
0094 NFC_PN532.md NFC PN532调试
0093 PCM_Data_Format.md 查看wav左右声道数据存放格式,理解PCM数据流格式
0092 Wifi_Linux_Driver.md Wifi驱动加载及基本调试
0091 systemd-journald.md 系统日志
0090 systemd-timesyncd.md 系统是如何同步时钟的
0089 ftrace_I2C.md 使用ftrace观察I2C,EEPROM是扩展板上的
0088 ftrace_CPU_Frequency.md 理解CPU自动调频
0087 strace.md 理解strace(system call trace)系统调用跟踪
0086 trace-cmd.md 理解trace-cmd工作原理
0085 netlink.md libnl基本使用方法
0084 wpa_supplicant_daemon.md 分析wpa_supplicant后台程序工作原理
0083 Process_Timer.md Linux系统常用定时器
0082 wpa_cli.md 分析wpa_cli的工作原理
0081 Android_Binder.md 移植Android Binder到树莓派
0080 Thread_Pool.md 了解线程池的工作原理
0079 Android_Init_Base_Arch.md 理解Android Init进程监听子进程原理
0078 OpenGrok.md 在线浏览器跟代码工具OpenGrok
0077 Large_File_Split.md splite分割大文件
0076 PCM5122.md DAI:Digital Audio Interface。DAI是数字音频接口的统称,PCM是其中的一种。
0075 Kernel_Panic_trigger.md 手动触发内核Panic
0074 Core_Files.md 经过和颖奇讨论,这个主要是应用程序Crash的时候,会自动保存堆载信息,便于调试;
0073 MathJax.md 在GitHub上渲染数学公式
0072 RPI4_USB_Camera.md 测试USB Camera
0071 WiFi_AP.md 由于OTA测试需要用到一个指定IP进行测试,于是暂时使用树莓派WiFI做一个AP,再加一个Apache2作为web服务端。
0070 PWM_Counter.md PWM计数器
0069 PADS.md 跟崔博学习一下PADS的使用方法
0068 wav_Sound_Generator.md C代码生成wav声音文件生成方法
0067 xrdp.md 使用远程桌面
0066 M24128_EEPROM.md 尝试M24128 EEPROM,使用AT的驱动就行了
0065 Continue_Show_dmesg.md 在终端持续显示dmesg信息
0064 OpenVPN_Multiple_Users.md OpenVPN多用户连接
0063 OpenVPN.md OpenVPN搭建
0062 U-Boot_Compile.md 虽说树莓派4B是64bit处理器,不过目前的系统镜像貌似是运行在32bit模式的,所以不要去编译64bit的U-Boot
0061 Sense_HAT_ATtiny88.md 分析Sense HAT的ATtiny88 MCU代码
0060 DebugHAT_led.md DebugHAT Led控制方法
0059 DebugHAT_Shutdown.md Debug HAT Shutdown按钮
0058 DebugHAT_Poweroff.md 这里的Poweroff不是是触发系统断电的按键功能,而是这个引脚默认低电平,如果系统关机,那么会给出高电平,告诉外围电路系统断电了。
0057 DebugHAT_AT24C02.md DebugHAT AT24C02 EEPROM使用方法
0055 Kernel_Message_To_UART_Port.md 将内核信息输出到Console Port
0054 NFS.md 支持NFS文件系统
0053 auto_sd_resize.md 分析SD卡自动resize功能
0052 shadowsocks.md 搭建shadowsocks服务器
0051 tig.md 如果你下载了Windows版本的git,你会发现其自带了tig命令,这也就说明这个命令有多好用。
0050 Cscope.md 和ctags一样好用的代码跟踪工具
0049 DTS_GPIO_Kernel_Driver_Interrupt.md GPIO口中断分析
0048 Gitweb.md 搭建Gitweb服务
0047 HTTP_Auth.md 尝试HTTP认证
0046 USB_Camera_udev.md USB摄像头驱动加载方法
0045 SoC_Device_Tree.md SoC设备树
0044 Create_Raspbian_Image.md 如果你想看看树莓派镜像是如何打包出来,可以看看这个
0043 Docker.md 树莓派上如何使用Docker
0042 ROS.md ROS catkin和Linux Yocto是一个概念,组织管理ROS功能包
0041 Add_Swap_Partition.md 手动添加Swap分区,内存不够的时候可以尝试用用
0040 Qt_4_OpenGL.md 学习使用OpenGL,但不知为何QT 5用不了
0039 RTIMULib.md 尝试一下RTIMULib库的使用方法
0038 Auto_Login_Via_TTY.md 自动登录,好像没什么用处
0037 Tensorflow_Install.md 安装Tensorflow,不过不会用
0036 Python_Call_C_Share_Lib.md Python直接调C共享库方法
0035 bash_complete.md 按tab键命令自动补全功能
0034 Gerrit.md 尝试搭建Gerrit代码服务器
0033 MBR_GPT.md 分析MBR GPT分区格式
0032 Boot_Dir_Support_SSH_Auto_Run.md 分析自动打开SSH和网络配置原理
0031 Bluetooth_SPP.md 尝试蓝牙串口功能
0030 OpenCV.md 学习OpenCV的基本使用方法
0029 Linux_Kernel_Compile.md 内核编译方法
0028 VNC_Connect.md 打开VNC功能
0027 git_server.md 搭建git服务器
0026 libdrm_modetest.md 编译libdrm,可以用于调试drm驱动的屏
0025 Vim_Support_Mouse_Paste.md Vim鼠标粘贴
0024 Kernel_Modules.md 内核模块编译
0023 Sense_HAT.md Sense HAT使用方法
0022 GPIO_Interrupt.md GPIO中断测试方法
0021 Auto_Send_Mail.md Python自动发邮件
0020 PWM.md 软件、硬件PWM
0019 Kernel_Build.md 内核编译文档
0018 Samba.md 搭建Samba服务
0017 Internationalisation_Options.md 系统语言设置
0016 Setup_Multiple_WiFi_Networks.md 设置Wifi账户密码
0015 Modify_Default_Route.md 使用了usb otg转网口功能,发现原来能用的网络不能用了,找一下原因;
0014 Ethernet_over_USB-Static_IP.md 貌似不设定静态IP,这个USB OTG的IP总是会变化,有时候还会跨网段变化,所以还是设定死了比较好。
0013 dtoverlay.md 分析设备树overlay功能,和上篇文档一样
0012 Dynamic_Device_Tree.md 动态设备树工作原理
0011 SPI.md 测试SPI基本通信
0010 I2C_AT24C0x.md 在FPGA上使用AT24C08,结果发现识别不到,在树莓派上测试一下情况。
0009 systemd-sysv-generator.md systemd是如何使用sysv的启动文件
0008 Systemd_Advance.md Systemd的基本概念及使用
0007 Systemd_Cron_rc-local.md Systemd添加服务
0006 Device_Tree_Overlays.md 简单看一下设备树Overlay
0005 raspi-config.md raspi-config解析
0004 Pin_Config.md 这里需要注意后面的设备树的叠加层的理解,这里不做解释。
0003 BIOS.md 树莓派使用配置文件充当BIOS配置
0002 Boot_Sequence.md 启动时序
0001 OTG_To_Ethernet.md 设置USB为OTG网卡

About

分析树莓派的启动、工作原理,借鉴其软件架构设计上的优点。