banner
按时间整理的学习笔记。

文章归档

Scroll down
所有归档

一、为什么外设总线重要

嵌入式开发经常要和硬件打交道。传感器、屏幕、Flash、按键、LED、通信模块都需要通过某种接口和主控芯片连接。

最常见的外设接口:

  • GPIO。
  • UART。
  • I2C。
  • SPI。
  • PWM。
  • ADC。

理解这些接口,是从应用开发走向板级开发和驱动开发的基础。

一、什么是交叉编译

交叉编译是指在一种平台上编译另一种平台运行的程序。比如在 x86_64 Ubuntu 电脑上编译 ARM 开发板运行的程序。

常见组合:

1
2
开发机:x86_64 Linux
目标板:ARM Linux

为什么需要交叉编译:

  • 开发板性能弱,编译慢。
  • 开发板存储小,不适合安装完整工具链。
  • CI/CD 通常运行在服务器上。
  • 需要统一构建环境。

一、什么是嵌入式开发

嵌入式开发是围绕特定硬件设备进行的软件开发。和普通 PC 或服务器开发相比,嵌入式更关注硬件资源、实时性、功耗、启动速度、稳定性和长期运行。

常见设备:

  • 路由器。
  • 工业控制器。
  • 智能家居设备。
  • 车载设备。
  • 摄像头。
  • 网关。
  • 可穿戴设备。

一、为什么调试能力很重要

Linux 应用开发真正的难点不只是写代码,而是程序出问题时能不能定位。程序可能在你的机器上正常,在服务器上崩溃;可能测试环境正常,生产环境慢;也可能偶发死锁、内存泄漏、文件句柄耗尽。

调试和排错要形成固定流程:

1
确认现象 -> 收集信息 -> 缩小范围 -> 验证假设 -> 修复 -> 回归

一、网络编程先理解什么

Linux 网络编程的核心是 socket。socket 是应用程序访问网络的接口,HTTP、WebSocket、RPC 等上层协议最终都建立在 socket 之上。

入门需要先理解:

  • IP:主机地址。
  • 端口:进程提供服务的入口。
  • TCP:可靠字节流。
  • UDP:无连接数据报。
  • 服务端:监听端口,等待连接。
  • 客户端:主动连接服务端。

一、系统编程学什么

Linux 系统编程关注应用程序和操作系统之间的接口。普通业务代码更多关心业务逻辑,系统编程则关心程序如何使用文件、进程、线程、信号、内存和网络。

入门阶段重点掌握:

  • 文件描述符。
  • openreadwriteclose
  • 进程创建和等待。
  • 线程创建和同步。
  • 信号处理。
  • 错误码和 errno

一、为什么先学命令行

Linux 应用开发离不开命令行。无论是编译、部署、查看日志、定位进程、分析网络,最终都会回到终端。命令行不是为了炫技,而是为了让你能直接控制系统。

入门 Linux 开发,建议先熟悉这些能力:

  • 能在目录中快速移动和查找文件。
  • 能查看文件内容和日志。
  • 能理解权限、用户、进程和环境变量。
  • 能把常用命令组合成脚本。
  • 能读懂构建脚本、启动脚本和部署脚本。

一、Linux 应用开发是什么

Linux 应用开发通常指在 Linux 系统上编写、编译、调试、运行和发布用户态程序。它和 Android、嵌入式、服务端开发都有交集,但核心基础基本一致:

  • 熟悉 Linux 文件系统、权限、进程、线程、信号、网络等机制。
  • 能使用 GCC、Make、CMake 等工具构建程序。
  • 能使用 GDB、strace、lsof、top、journalctl 等工具定位问题。
  • 能理解动态库、静态库、环境变量、系统调用和进程通信。
  • 能把程序打包、部署,并在目标环境中稳定运行。

一、Codex CLI 是什么

Codex CLI 是 OpenAI Codex 的命令行工具,适合在本地终端里处理真实代码仓库中的开发任务。它可以读取当前项目、执行命令、修改文件、运行测试、解释代码、做代码审查,并且会根据权限配置决定什么时候直接执行、什么时候向你确认。

简单理解:

  • 在 IDE 中写代码时,可以把 Codex CLI 当成一个“终端里的结对编程助手”。
  • 在已有项目中排查问题时,可以让它先阅读代码,再给出修改方案并直接落地。
  • 在重复性任务中,可以用非交互命令让它批量完成检查、重构、生成文档等工作。
Hello World
  • 06/20
  • 17:00
1101112131421
请输入关键词进行搜索