6.管理Flash和DDR及shell介绍

本文介绍了U-Boot阶段Flash和DDR的分区方法,详细解释了分区的重要性和常见规则。同时,文章还探讨了Shell作为操作系统终端命令行及编程语言的角色,包括其运行机制和常用语言类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


9.1.uboot阶段Flash的分区
(1)所谓分区就是指对Flash进行分块管理,一般Flash中分为uboot、var环境变量、Kernel、rootfs、自由空间这5个分区(见图A)。
(2)在PC机中,因为大家都是在操作系统下使用硬盘的,整个硬盘由操作系统统一管理,操作系统会使用文件系统管理硬盘空间,所以用户不需要太在意分区问题。
(3)在uboot中没有操作系统,所以我们对Flash(即硬盘)的管理必须事先使用分区界定(uboot和kernel中都有个分区表,分区表即我们做系统移植时对Flash的整体管理分配方法)。我们在部署系统时按照事先规划好的分区界定方法来部署,uboot和kernel中的软件也按照该分区界定方法进行工作,从而不会出错。
(4)分区方法是可以变动的,但是一般在设计系统移植时就会定好。分区方法制定规则:uboot(uboot必须从Flash起始地址开始存放,也许是扇区0/扇区1,取决于SoC的启动设计;uboot分区大小一般为512KB或者1MB)、var环境变量(环境变量分区一般紧贴uboot存放;分区大小一般为32KB或更大一点)、kernel(kernel分区一般紧贴环境变量分区存放;分区大小一般为3MB或5MB或其他)、rootfs(rootfs分区一般紧贴kernel分区存放,分区大小要看具体的根文件系统的大小)、自由分区(一般kernel启动后将自由分区挂载到rootfs下使用)。
(5)总结:整个Flash从开头到结尾充分利用,各分区彼此相连;uboot必须在Flash的开头,其他分区相对位置可变;各个分区的大小由系统移植工程师自己决定成合适大小(太小容易溢出,太大浪费空间);分区在系统移植前需确定好,在uboot和kernel中需使用同一个分区表,将来在系统部署时和系统代码中的分区方法也必须一样。


9.2.uboot阶段DDR的分区
(1)DDR的分区和Flash的分区不同,因为DDR掉电消失而Flash掉电存在,所以说DDR是每次系统运行时才部署使用的。
(2)内存的分区主要是在linux内核启动起来之前,linux内核启动后内核的内存管理模块会接管整个内存空间,我们可以撒手不管了。
(3)内存分区的关键在于内存中的哪一块用来干什么必须分配好,避免各个不同功能使用了同一块内存区域造成相互踩踏。譬如说我们tftp 0x23E00000 zImage去下载zImage到内存的0x23E00000处就会出错,因为这个内存处实际是uboot的镜像所在。这样下载会导致下载的zImage把内存中的uboot给冲掉。


9.3.shell是操作系统的终端命令行
(1)shell可理解为软件操作系统提供给用户操作的命令行界面,它是人机交互的一种方式。
(2)我们可使用shell和操作系统、uboot等软件系统进行交互。具体来说即我们通过shell给软件系统输入命令然后回车执行,执行完成后又会回到shell命令行,然后可以再次输入命令执行。
(3)上述操作方式在一般情况下工作很好,但是有缺陷。譬如当我们需在linux下创建100个文件分别为a1.c~a100.c,在这种情况下我们手工输入命令创建文件会很累。最好的做法是把文件创建过程写成一个shell脚本程序,执行这个程序的效果和手工输入命令的效果相同即可。


9.4.shell是一类编程语言
(1)编写shell脚本时使用的语言是shell语言,又叫脚本语言。
(2)shell脚本其实是一类语言的总称,它不是单独的某种语言。


9.5.常用的shell语言-sh、bash、csh、ksh、perl、python等
(1)在linux下常用的脚本语言是bash、sh这两种。perl、python这样的高级脚本语言常用在网络管理配置等领域,系统运维人员一般要学习这些。
(2)脚本语言作为一种工具在嵌入式程序中主要是用来做配置。每个复杂的嵌入式程序都是可配置的,脚本语言实现其配置过程。我们自然不会使用过于复杂的脚本语言特性,因此只需要针对性的学习即可。
(3)linux下最常用的脚本是bash,我们学习也是以bash为主。


9.6.shell脚本的运行机制-解释运行
(1)C语言编写出源代码后无法直接运行,需要编译链接形成可执行的二进制程序后才能运行;而脚本程序编写好源代码后即可直接运行,没有编译链接过程。
(2)shell程序是解释运行的,所谓解释运行就是说当一个shell程序执行时,shell解析器会逐行的解释shell程序代码,然后逐行的运行,类似C语言中的顺序结构。
(3)CPU实际只认识二进制代码,根本不认识源代码;脚本源代码被逐行解释执行时完成脚本源代码转成二进制的过程,该过程不一定是编译链接,因为这行脚本程序可能早就编译链接好了,在这里我们只是调用它而已。


这里写图片描述


### MTK 平台 DDR 压力测试方法与工具 在 MTK 平台下进行 DDR 压力测试,可以采用多种方法工具来确保 DDR 的稳定性。以下是详细的方法说明: #### 1. 使用 MTK FlashTool 的 MemoryTest 功能 MTK FlashTool 提供了一个内置的 MemoryTest 功能,用于测试 DDR 的稳定性可靠性。该功能适用于 MTK 平台中 6755(含)之后的版本[^1]。如果当前平台不支持此功能,FlashTool 会自动隐藏相关的测试选项。 - **操作步骤**: - 确保设备连接到 PC,并正确安装驱动程序。 - 打开 MTK FlashTool,在工具栏中找到 MemoryTest 功能。 - 根据提示选择测试模式并启动测试。 #### 2. 利用 ETT 压力测试工具 对于更复杂的 DDR 压力测试,可以使用 MTK 官方提供的 ETT 工具包。这些工具包通常包含必要的脚本文件,能够执行更全面的测试[^2]。 - **准备工作**: - 下载并解压 MTK_MVG_TOOLS.rar 文件,其中包含 `MTxxx_ETT_and_stress_test__Tool_exe_V1.0.rar`。 - 将解压后的工具放置在合适的目录下,并确保所有依赖项已正确安装。 - **测试过程**: - 运行工具中的脚本文件,按照提示完成 DDR 的压力测试。 - 测试过程中可以监控系统的运行状态,记录任何异常行为。 #### 3. 通过 Monkey 脚本测试内核稳定性 为了进一步验证 DDR 的稳定性,可以结合 Monkey 脚本对系统进行全面的压力测试。这种方法不仅可以检测 DDR 的问题,还可以评估整个系统的健壮性[^3]。 - **具体实现**: - 启动 MTK Log 工具,确保异常信息能够实时打印到屏幕上。 - 编写或下载现成的 Monkey 脚本,设置适当的参数以模拟高负载环境。 - 在测试期间,若系统出现崩溃或重启,检查 `/data/vendor/mtklog/aee_exp/db.fatal.00.KE` 文件,分析内核错误日志。 - 如果未发现系统重启且无相关日志输出,则可能是硬件或 DDR 与主芯片不兼容的问题,此时可以通过降频来缓解。 #### 4. 降频测试(可选) 当 DDR 频率过高导致系统不稳定时,可以尝试降低 DDR 的工作频率。这虽然会牺牲部分性能,但有助于解决因硬件不匹配引发的问题。 - **操作方法**: - 修改平台配置文件中的 DDR 频率参数。 - 重新编译固件并刷入设备。 - 再次运行上述压力测试,验证降频后的效果。 ```python # 示例:Monkey 脚本示例 adb shell monkey -p com.example.app --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v 500000 ``` ### 注意事项 - 在执行压力测试前,请确保备份重要数据,避免因系统崩溃造成数据丢失。 - 测试过程中应密切监控设备温度,防止过热导致测试结果偏差。 - 若发现问题,及时收集日志并进行深入分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值