Skip to content

软件文档

目录

前言

本文将通过若干个实验,帮助读者快速掌握嵌入式Linux BSP开发基本知识
本文并非按顺序讲解,读者可以按兴趣选择阅读。

实验环境:

设施 型号
NINJAR-lite F1C200s ARM9 64MB DDR1
Linux 6.5.1 stable
uboot v2023.07.02

传送门

裸机

【未完】第一个裸机程序:blink
【待添加】初始化时钟: 程序跑的更快了

外设

【待添加】初始化UART: 跟pc打个招呼吧
【待添加】初始化I2C: 连接更多的设备
【待添加】初始化SPI: 连接更多的设备

进阶

【待添加】使用debugger调试程序

Bring Up

【待添加】Bring Up: 如何适配主线linux
【待添加】Bring Up: 如何适配主线uboot
【待添加】Bring Up: 如何适配主线buildroot
【待添加】Bring Up: 如何适配主线yocto

uboot

SPL

【未完】SPL:如何添加一个 Image Loader

【待添加】uboot: 如何添加一个command
【待添加】uboot: 如何编写一个驱动

驱动实战

【未完】 uboot驱动实战: 为SPI TFT添加显示支持

linux

应用开发

【待添加】linux应用开发: LVGL : 移植
【未完】linux应用开发: Rust : 环境搭建
【未完】linux应用开发: 通过 i2c-dev 节点访问设备
【未完】linux应用开发: v4l2 数据获取流程

内核开发

【未完】linux内核开发: 神奇的initcall调用
【待添加】linux内核开发: reboot & poweroff 流程修改
【待添加】linux内核开发: 添加一个系统调用
【待添加】linux内核开发: 中断流程

内核接口

【待添加】linux内核接口: ioctl
【待添加】linux内核接口: procfs
【待添加】linux内核接口: sysfs
【待添加】linux内核接口: 中断 interrupt
【待添加】linux内核接口: 等待队列 waitqueue
【待添加】linux内核接口: 工作队列 workqueue
【待添加】linux内核接口: 链表 link list
【待添加】linux内核接口: 内核线程 kernel thread
【待添加】linux内核接口: 小任务 tasklet
【待添加】linux内核接口: 自旋锁 spinlock
【待添加】linux内核接口: 互斥体 mutex
【待添加】linux内核接口: 原子量 atom
【待添加】linux内核接口: 定时器 timer
【待添加】linux内核接口: 完成 completion

内核配置

linux内核配置: USB声卡驱动

内核子系统

【待添加】Clock 子系统
【待添加】Interrupt 子系统
【待添加】电源管理 子系统
【待添加】GPIO 子系统
【待添加】Pinctrl 子系统
【待添加】Display 子系统
【待添加】V4L2 子系统
【待添加】ALSA 子系统
【待添加】Input 子系统
【待添加】I2C 子系统
【待添加】SPI 子系统
【待添加】IIO 子系统
【待添加】Regmap 子系统

驱动接口

【待添加】linux驱动接口: poll
【待添加】linux驱动接口: e-poll
【待添加】linux驱动接口: select
【待添加】linux驱动接口: softirq
【待添加】linux驱动接口: threaded irq

驱动适配

【待添加】linux驱动适配: i2c: iio: bmp280

【待添加】linux驱动适配: spi: w5500

【待添加】linux驱动适配: i2s:

【待添加】linux驱动适配: fbtft: ssd1306
【待添加】linux驱动适配: fbtft: st7735r
【未完】linux驱动适配: fbtft: st7789v
【待添加】linux驱动适配: fbtft: ssd1327
【待添加】linux驱动适配: fbtft: nv3030b
【未完】linux驱动适配: sun4i-lradc-keys
【未完】linux驱动适配: rtl8188eus
【未完】linux驱动适配: USB Gadget g_ether

驱动开发

【待添加】linux驱动开发: 编写一个 cpufreq 驱动
【待添加】linux驱动开发: 编写一个 字符设备驱动
【待添加】linux驱动开发: 编写一个 Misc设备驱动
【待添加】linux驱动开发: 编写一个 led 驱动
【待添加】linux驱动开发: 编写一个 按键 驱动

【待添加】linux驱动开发: 编写一个 I2C 控制器驱动
【待添加】linux驱动开发: 编写一个 I2C 设备驱动

【待添加】linux驱动开发: 编写一个 SPI 控制器驱动
【待添加】linux驱动开发: 编写一个 SPI 设备驱动

【待添加】linux驱动开发: 编写一个 DMA 控制器驱动
【待添加】linux驱动开发: 编写一个 FrameBuffer 设备驱动
【待添加】linux驱动开发: 编写一个 USB 设备驱动

电源管理

【待添加】linux电源管理: regulator子系统

杂项

【未完】linux杂项: 命令行邮箱开发环境配置
【未完】linux杂项: 向社区贡献代码
【未完】linux杂项: 修改控制台字体
【未完】linux杂项: 修改控制台光标行为

rootfs

Raw

【待添加】rootfs: jffs2 的使用
【未完】rootfs: UBIFS 的使用
【未完】rootfs: SquashFS 的使用
【未完】rootfs: overlayfs 的使用

Buildroot

【待添加】Buildroot: 常用开发操作

Yocto

【待添加】Yocto: 什么是Yocto?
【待添加】Yocto: 新建一个Yocto工程
【待添加】Yocto: 如何在现有的工程上开发
【未完】Yocto: 如何添加一个layer
【待添加】Yocto: 如何编写一个Recipe
【未完】Yocto: 修改SDK环境加载脚本中的flags

debian

【未完】使用debootstrap构建debian根文件系统
【待添加】使用multistrap构建emdebian文件系统

打包

【待添加】手动: 将固件打包成SPI-Nor格式
【待添加】手动: 将固件打包成SPI-Nand格式
【待添加】手动: 将固件打包成sdcard/eMMC格式

调试

qemu

烧录

【待添加】烧录: 通过USB模拟板上Flash为大容量存储设备进行固件烧录