1. Linux 设备文件/dev/*
https://blog.csdn.net/sinat_36184075/article/details/71598834
制作ext2格式的文件系统
2. 制作文件系统过程
dd if=/dev/zero of=rootfs.ext2 bs=1024 count=2048
losetup /dev/loop1 rootfs.ext2
mke2fs -m 0 /dev/loop1 2048
mount -t ext2 /dev/loop1 ./rootfs/ @
用busybox制作文件系统的内容
umount /dev/loop1 @卸载loop设备,这里是解除/dev/loop1和./rootfs/的关联
losetup -d /dev/loop1 @卸载loop设备,这里是解除/dev/loop1和rootfs.ext2的关联
命令解析
(1)用dd命令创建rootfs.ext2,块大小为1024字节,总共2048块,也就是rootfs.ext2为2M,将来的文件系统大小不能超过2M;
(2)一般来说设备文件是要对应具体的物理设备的,/dev/loop1不是真实的设备文件,是仿真出来的,没有对应具体的物理设备;losetup命令将rootfs.ext2和/dev/loop1绑定起来,将来我们访问/dev/loop1设备文件就相当于访问rootfs.ext2,rootfs.ext2就相当于物理设备;我们将来挂载/dev/loop1后,实际访问的就是rootfs.ext2文件。总的来说:losetup命令把文件虚拟成块设备,籍此来模拟整个文件系统,将来可以用于挂载。
(3)格式化/dev/loop1为ext2格式,“-m"指定给管理员保留区块的比例,”-m 0"就是不保留;
(4)将/dev/loop1挂载到./rootfs/目录下;
(5)拷贝构建文件系统需要的文件到./rootfs/目录下,也就是拷贝到rootfs.ext2里;
(6)卸载/dev/loop1,这里是解除/dev/loop1和./rootfs/的关联;
(7)卸载loop设备,这里是解除/dev/loop1和rootfs.ext2的关联;
3. 制作镜像
http://forum.orangepi.cn/thread/3145
嵌入式术语
IRQ:全称为Interrupt Request,即是"中断请求
1、container_of 宏介绍
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
主要作用是:根据结构体某一成员的地址,获取这个结构体的首地址。这个宏有三个参数:
type:结构体类型
member:结构体内的成员
ptr:结构体内成员 member 的地址
也就是说,当我们知道了一个结构体的类型,结构体内某一成员的地址,也就可以直接获得到这个结构体的首地址。container_of 宏返回的就是这个结构体的首地址。
设备树
Linux设备树语法详解
Linux驱动入门-设备树DTS概念介绍
一文搞定 Linux 设备树
Linux驱动的一个博客
Linux_GUI加速(2)_Linux中的DRM-KMS分析
https://events.static.linuxfound.org/sites/events/files/slides/brezillon-drm-kms.pdf