文件系统
文件系统是操作系统对磁盘的管理
不论是什么操作系统,都需要对存储介质进行分区进行管理,例如:在windos中,常常要划分系统盘和数据盘,同一个内存也可以划分成多个存储区域。系统启动所必要的文件,其他磁盘空间给用户存放数据使用
一般操作系统都会支持多种常用文件系统格式:FAT(U盘)、NTFS、EXT4、YAFFS2,哪怕是U盘、SD卡都可以分区管理
在linux下SD卡分区方式,也可以用分区管理工具进行格式分区
windows默认NTFS,NTFS就是默认的文件系统,LINUX默认是EXT4
linux的分区是属于目录,要使用某一个外部设备,必须要挂载到目录设备下才能使用/mount /dev/xxx
windows是分区是属于磁盘,目录是分区下面
ext4是主要为linux使用mmc型存储器而设计的一种日志型文件系统
uboot支持EMMC和SD卡,因此也要提供EMMC和SD卡的操作命令。一般认为EMMC和 SD卡是同一个东西,所以没有特殊说明统一使用MMC来代指EMMC和SD卡。
busybox是一个小型的linux系统,它提供可以配置的选项,生成剪切后的了linux系统,和一般用到的linux系统不同,并且能将设备压缩到很小,塞进一个可执行文件里面
在文件系统中,配置busybox选项
在配置busybox选项时候,首先要配置它的静态库,busybox的build options,配置好它的编译方式,选择你的交叉编译工具链
其他的命令根据需要去配置,要用什么就配置什么命令
例如有些命令在配置的时候要用到比如:login,passwd,passwd这些在etc,目录下需要调用,可能会发现,
常用的命令:mount ,ls ,lsmod ,cd,cp,rm,等等
以下说几个重要的命令
df:查看节点
mount:挂载,挂载U盘,磁盘分区都有用到
swapon,swapoff,交换分区,用来暂存到内存的数据,暂时存放
insmod:挂载,这里有个很奇怪的问题,当选择simplified modutils 驱动无法挂载上,必须要要把命令手动设置上,但是有的又不用,当时显示错误是:insmod: no gzip/xz magic,显示很奇怪,一但不选择简化版的,全部选择后,就容易解决
一起配置好后,保存,保存了就不要再make distclean 因为保存后会生产.config文件,一切编译都是依据这个.config里面的文件去编译生成,如过清除后一切要重新选择
make -j编译
make install生成文件,文件会生成在__install里面
一般只生成三个文件,如果要生成usr,就要在配置的时候,取消选择”不生成“
linuxrc是一个应用层的程序,和内核没有关系。linuxrc如果是静态编译连接的,则直接可以运行;如果是动态编译连接的,必须提供必要的库文件才能运行。但实际上/linuxrc由内核直接调用执行,因此用户没有机会去导出库文件的路径,因此/linuxrc没法动态连接,一般都是静态连接的。
生成的linuxr一般指向bin里的busybox,busybox里面的命令也都指向这个
命令执行时引出用户界面。/linuxrc应用程序,也就是我们认识中的进程1,是其他所有应用程序进程的祖宗进程。比如用户操作界面由/linuxrc引出,应用程序是直接或者间接地被/linuxrc调用执行的。用户界面程序、其他的应用程序就是进程2、3、4等等。
然后添加etc目录
etc目录是linux的启动文件,一切程序的各种环境,配置,程序的加载要通过etc目录里面的配置进行实现,文件的名字都是固定的,因为linux的引导程序是根据名字来查找,进入etc目录创建init.d
rcs是第一个启动文件,里面有环境的配置,文件创建,也可以写入挂载脚本,主要是sh脚本
fstab里面是自动分区,mount -a会自动加载所有分区表里面的分区
profile里面是一个环境变量,对所有的用户都能配置和执行这个shell脚本。
最后对整个rootfs进行打包,通过打包命令
mksquashfs rootfs/ rootfs.bin -b 64K -comp xz -fstime 1640995200 -all-root
这个方式压缩比较大,能压缩到很小,而且只是可读文件,生产的文件加载到内存里,烧写到flash中,算好地址,一定要确定好区间,不能太大。
jeff格式也可以打包生成,也能放进去,只不过会比较大,而且jeff格式是可读可写的分区
编译.ko文件要编译自己的,因为ko文件会指向自己的kernel里,里面有些配置信息不一样,如果不同的编译出来的ko很有可能无法加载
加载驱动报错:如果加载驱动报错,很有可能提供的驱动对应的kernel版本不对,需要重新编译.ko文件,将源码修改,指向自己的kernel,在运行的时候kerlnel会检查自己的版本和这个驱动的版本是否一直。
sinfo的源码要修改,因为里面官方给出的摄像头文件信息不全,没有自己要用的,sinfo会在加载的时候查看摄像头的信息,获取到数据信息才能执行代码,
加载驱动的时候,要对驱动进行挂载,挂载驱动要写入参数,修改好的SDK中有加载的流程和步骤,可以通过SH文件查看,通过官方提供的sh,加载驱动,