-----知识点
-----flash?nand flash?nor flash?
FLASH 存储器又称为闪存,它也是可重复擦写的存储器。
NOR Flash的NOR为NOT OR(或非)之意,NAND Flash的NAND则为NOT AND(与非)之意,而该名称的命名是与两种FLAHS的架构有关的。
NOR 与 NAND 特性的差别,主要是由于其内部“地址/数据线”是否分开导致的。
-----emmc?
eMMC是一种嵌入式、非易失的存储系统,它主要由闪存、闪存控制器和eMMC协议接口等组成,以BGA的形式封装在一起。
eMMC内部的闪存一般都属于Nand Flash
-----MTD
MTD(Memory Technology Device)子系统是Linux内核的一个组成部分,它为各种类型的闪存和EEPROM设备提供了一个统一的接口。
MTD 子系统为 Linux 内核提供了与非易失性存储设备交互的标准接口,使得开发者可以更方便地实现对这些设备的管理、操作和访问。.
用途:系统更新,数据存储,设备测试
/dev/mtd*
/dev/mtd设备文件是MTD子系统的核心组成部分。这些文件代表了系统中的MTD设备,通常用于访问小块的、页对齐的内存区域。每个/dev/mtd设备文件都有一个数字后缀,例如/dev/mtd0、/dev/mtd1等,这些数字代表了设备在系统中的索引。
用途:文件系统挂载,数据分区,系统恢复
/dev/mtdblock*
与/dev/mtd不同,/dev/mtdblock设备文件提供了对MTD设备的块设备接口。这意味着它们可以被挂载为文件系统,并以块为单位进行读写操作。/dev/mtdblock设备文件的命名方式与/dev/mtd类似,也使用数字后缀来区分不同的设备。
当你在一个嵌入式系统中使用 NOR Flash 存储器时,可能会看到 /dev/mtd0 、/dev/mtdblock0 和 /dev/mtd0ro 这几个设备文件,它们对应的都是 NOR Flash 存储器中的同一个物理空间或逻辑分区。其中 /dev/mtd0 和 /dev/mtdblock0 提供了不同的读写方式,/dev/mtd0ro 则是只读的。这些设备文件允许用户以不同的方式与 NOR Flash 存储器进行交互和访问,例如可以进行烧写、读取和执行代码等操作。
进入系统后发送cat /proc/mtd
size是本mtd分区的最大字节数空间 ,erasesize是本分区的最小擦除字节数空间,读出来的信息显示这个erasesize就是一个nand block
0x00020000 换算为10进制就是 131072,也就是128K(1 block)。
-----Linux系统中的U-Boot、Kernel、RootFS
它们之间在SOC上电后顺序启动、加载,是顺序依赖的。
SOC上电初始化后会先运行内部固化的底层boot(出厂自带,用户不可编程)程序,然后开始运行用户代码(到这一步,如果不使用Linux系统或其他的操作系统的话,就是大家所说的裸机程序)。
而U-Boot就是一种开源的通用引导加载器,用于承接从底层boot到Kernel的中间过程。
Kernel是Linux系统的核心程序,但只有Kernel还不能功能正常的满足用户使用的运行还需要有RootFS(这是一系列文件的集合,感觉翻译成根文件系统很奇怪,容易令初学者和文件系统的概念混淆,不如叫根文件集合)。
U-Boot 负责硬件的初始化和操作系统内核的加载;然后,Kernel内核启动并管理硬件资源,同时挂载 RootFS;最后,系统进入用户空间,开始执行用户级的应用程序。这三者共同构成了一个完整的嵌入式 Linux 系统。
-----U-Boot工程目录分析
-----window和linux开发板之间挂载文件
已调试通过,挂载成功
流程
-----linux虚拟机 和 linux开发板 之间挂载文件
前提是linux开发板已经创建该目录/mnt/net,并且linux虚拟机已经开机。
linux开发板发送如下指令:
mount -t nfs -o nolock 10.10.40.237:/home/ebaina/work/nfs /mnt/net
通俗来说就是
mount -t nfs -o nolock 虚拟机的ip地址:虚拟机的文件路径 开发板文件路径
-----TEE OS是什么?REE?
TEE:Trusted Execution Environment,可信执行环境
REE:Rich Execution Environment,移动设备通用环境
-----IP、子网掩码、网关、DNS、端口号
-----海思SDK修改点
-----检测不到emmc设备,修改设备树
发送fdisk -l没有反应,检测不到emmc设备。
内核目录下SS928V100_SDK_V2.0.2.2\open_source\linux\linux-4.19.y\arch\arm64\boot\dts\vendor\ss928v100-demb-flash.dts里
&mmc0 {
bus-width = <4>;
status = “okay”;
};
注意:修改后,osdrv下直接make,不要make clean
烧录固件后,可以检测到emmc
-----emmc设备挂载、分区
mount -t vfat /dev/mmcblk0p1 /mnt/emmc/
更改开发板:把mount命令加到/ect/init.d下的S90autorun后面,保存后,开发板断电上电,可以自动挂载。
但这是暂时的,要想每次下载好固件都是挂载好的,需要更改sdk。
SDK怎么修改呢?
修改自启动文件S90autorun
要注意,SS928V100_SDK_V2.0.2.2\scripts\S90autorun与SS928V100_SDK_V2.0.2.2\osdrv\pub\rootfs_glibc_arm64\etc\init.d\S90autorun,
后者会随着前者的修改而改变。
-----开发板烧录完上电后自动发送setenv bootargs和setenv bootcmd
setenv bootargs 'mem=512M console=ttyAMA0,115200 tee_enable clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(uboot),12M(kernel),128M(rootfs)';
setenv bootcmd 'nand read 0x42000000 0x100000 0xC00000;bootm 0x42000000';
sa
re
分区表
固件烧录
烧录完上电后会停在uboot,发送setenv bootargs和setenv bootcmd后会进入系统。
怎么上电自启动呢?
1.修改路径
SS928V100_SDK_V2.0.2.2\open_source\u-boot\u-boot-2020.01\configs\ss928v100_defconfig
2.修改路径
SS928V100_SDK_V2.0.2.2\open_source\u-boot\u-boot-2020.01\include\configs\ss928v100.h
3.这里可以修改uboot延时时间
SS928V100_SDK_V2.0.2.2\open_source\u-boot\u-boot-2020.01\configs\ss928v100_defconfig
-----SDK中修改设备树dts文件后,make clean会恢复原样,怎么才能维持修改状态
1.设备树修改emmc
设备树文件路径:SS928V100_SDK_V2.0.2.2\open_source\linux\linux-4.19.y\arch\arm64\boot\dts\vendor\ss928v100-demb-flash.dts
修改完这个文件,
还要修改路径:SS928V100_SDK_V2.0.2.2\open_source\linux\linux-4.19.90.patch
2.修改bootargs和bootcmd
修改路径:SS928V100_SDK_V2.0.2.2\open_source\u-boot\u-boot-2020.01.patch
搜索函数ss928v100_defconfig和ss928v100.h
-----烧完固件,跑摄像头推流程序,用vlc打开网络串流失败
开发板开启telnetd服务,使用mobaxterm开启telnetd失败
使用使用虚拟机可以通过telnetd连上开发板,
推流失败
用同事电脑可以,看来是我的windows网络有问题。。。。。
-----怎么修改开发板的IP、子网掩码、网关、DNS