Report of program history

编程语言发展的三个阶段

一. 机器语言

第一代计算机语言称为机器语言。机器语言就是 0/1 代码。计算机只能识别 0 和 1。在计算机内部,无论是一部电影还是一首歌曲或是一张图片,最终保存的都是 0/1 代码,因为 CPU 只能执行 0/1 代码。那么这是不是就意味着我们编程一定要用 0/1 代码呢?

首先这么编写肯定是可以的,但是这样太麻烦,而且很不好理解,所以后来就出现了汇编语言。

二. 汇编语言

汇编语言就是将一串很枯燥无味的机器语言转化成一个英文单词。比如说:

add 1, 2;

add 就是一个英文单词,这样看起来就稍微有一些含义了,即 1 和 2 相加。这个就是汇编语言。

如果直接用机器语言编写的话,这几乎是无法实现的。因为用机器语言太难记忆了,也没人能看得懂。所以后来就设计出了第二种语言,即将 0/1 代码翻译为英文单词,这些英文单词直接对应着一串 0/1 指令。这个就是汇编语言。

通过专门的软件就可以将这些英文单词转化成 0/1 代码并由计算机执行,这种专门起翻译的作用的软件叫作编译器。

这些英文单词和与它们对应的 0/1 代码之间的对应关系,以及语言的语法,在编写这个软件的时候就已经写在里面了。我们只要通过编译器就可以将这些都转化成 0/1 代码。这样大大方便了我们对程序的编写。

三. 高级语言

汇编语言之后又出现了第三代语言。第三代语言又叫“高级语言”。高级语言的发展分为两个阶段,以 1980 年为分界线,前一阶段属于结构化语言或者称为面向过程的语言,后一阶段属于面向对象的语言。

什么叫面向过程,什么叫面向对象?这是很难解释的一个问题,所以这个问题大家现在先不要考虑。等到将来你们学完C语言C++Java 或者 C# 之后才有可能理解。因为这个需要比较。

总之,面向过程语言中最经典、最重要的就是C语言。Fortran、Basic 和 Pascal 语言基本上已经很少有人使用了。但是C语言一直在用,因为C语言是计算机领域最重要的一门语言。但是C语言也有缺陷,它的缺陷只有在学完面向对象语言之后才能体会到。

所以从 20 世纪 80 年代开始又产生了另外一种“以面向对象”为思想的语言,其中最重要、最复杂的就是 C++。C++ 从易用性和安全性两个方面对C语言进行了升级。C++ 是一种较复杂、难学的语言,但是一旦学会了则非常有用。

因为 C++ 太复杂,所以后来就对 C++ 进行了改装,产生了两种语言,一个是 Java,另一个是 C#。

Java 语言是现在最流行的语言之一。C# 则是微软公司看 Java 很流行而写的一个与 Java 语法相似的语言。

以上引用自:http://c.biancheng.net/view/130.html.

转载于:https://www.cnblogs.com/superyucong/p/9895322.html

<think>好的,我现在需要帮助用户理解他们提到的这些文件和相关术语。用户列出了多个条目,比如“bootloader last log”、“dump_report.txt”、“etbdata uboot.bin”等,看起来都是与系统启动、调试或崩溃相关的文件或日志。 首先,我要确定每个条目的含义。例如,“bootloader last log”可能指的是引导加载程序最后一次运行的日志,而“etbdata uboot.bin”可能与U-Boot引导加载程序的二进制数据有关。接下来,“extend”开头的条目像是某种扩展的调试信息或内存转储,比如“extend ddr register dump”可能是DDR内存寄存器的转储数据。 用户可能遇到了系统启动问题或崩溃,需要分析这些日志和转储文件来诊断问题。我需要解释每个文件的作用,以及如何查看和分析它们。例如,文本日志可以用文本编辑器打开,而二进制文件可能需要特定工具,如hex编辑器或专门的调试软件。 另外,用户可能不太清楚如何操作这些文件,可能需要指导他们使用工具如GDB、objdump,或者如何查看日志文件的内容。同时,要注意不同文件可能需要不同的处理方法,比如有的需要权限,有的需要特定的环境。 还要考虑用户的技术水平,可能需要用较为通俗的语言解释术语,避免过于专业的术语,或者至少先解释清楚每个术语的基本概念。例如,解释什么是Bootloader,什么是DDR寄存器,以及为什么需要转储这些信息。 最后,可能需要给出一个整体的分析步骤,帮助用户逐步排查问题,比如先检查bootloader日志,再分析内存转储,最后查看断言错误等。同时提醒用户注意文件权限和系统安全,避免误操作导致进一步的问题。</think>以下是与系统启动、调试相关的文件/日志解析与操作指南,按条目分类说明: --- ### 一、核心文件解析 #### 1. **`bootloader last log` / `bootloader_pre log`** - **作用**:记录 Bootloader(如 U-Boot)启动阶段的日志,包含硬件初始化、设备检测、内核加载等信息。 - **查看方法**: ```bash dmesg | grep -i "bootloader" # 从内核日志中筛选相关记录 cat /proc/cmdline # 查看启动参数(可能与Bootloader传递的参数相关) ``` - **典型内容**: ``` Loading kernel from mmc0... Init RAM: OK Board: Xilinx ZynqMP ``` #### 2. **`dump_report.txt`** - **作用**:系统崩溃或调试时生成的内存/寄存器转储报告。 - **分析工具**: - **文本部分**:直接使用文本编辑器查看错误描述和调用栈。 - **二进制数据**:结合 `addr2line` 或 `gdb` 定位代码位置: ```bash addr2line -e vmlinux 0xffff000008ab1234 # 将地址转换为代码行 ``` #### 3. **`etbdata uboot.bin`** - **含义**:可能包含 U-Boot 的 Embedded Trace Buffer (ETB) 数据,用于记录运行时的追踪信息。 - **操作步骤**: 1. 使用 `uboot-dump` 或 `objdump` 解析二进制: ```bash objdump -D uboot.bin > disassembly.txt # 反汇编分析 ``` 2. 若为 ETB 追踪数据,需专用工具(如 ARM DS-5)解码。 --- ### 二、`extend` 前缀文件解析(常见于调试场景) #### 1. **`extend cp assert`** - **含义**:协处理器(Coprocessor)断言失败时的调试信息。 - **关键操作**: - 检查断言触发的条件(如寄存器值、指令地址)。 - 对比硬件手册确认协处理器配置是否符合预期。 #### 2. **`extend data-bss`** - **作用**:记录程序运行时数据段(Data)和未初始化段(BSS)的内存状态。 - **分析方法**: ```bash readelf -S program.elf # 查看ELF文件段信息 hexdump -C extend_data-bss # 查看内存内容 ``` #### 3. **`extend ddr dwfs history` / `extend ddr register dump`** - **含义**: - **DDR寄存器转储**:DDR内存控制器配置状态(时序、电压等)。 - **DWFS History**:可能与 DDR 动态频率调节(Dynamic Frequency Scaling)记录相关。 - **工具建议**: - 使用厂商提供的 DDR 配置工具(如 Cadence JEDEC Configurator)。 - 对照芯片手册解析寄存器值(如 `MR0`、`MR1` 模式寄存器)。 #### 4. **`extend io`** - **作用**:I/O 端口或内存映射寄存器的读写记录。 - **调试重点**: - 检查外设初始化序列是否符合时序要求。 - 使用 `ioremap`(Linux)或逻辑分析仪验证硬件信号。 #### 5. **`extend irqstack0 0` / `extend irqstack0 1` / `extend irgstack0 2`** - **含义**:中断栈(IRQ Stack)的多个层级快照,用于分析中断嵌套或栈溢出问题。 - **分析方法**: ```bash arm-none-eabi-addr2line -a -e firmware.elf <stack_address> # 定位中断处理函数 ``` - 检查栈指针(SP)是否越界。 - 结合 `addr2line` 追溯调用链。 --- ### 三、操作流程与工具推荐 | **文件类型** | **分析工具** | **关键命令/步骤** | |-----------------------|----------------------------------|--------------------------------------------| | Bootloader 日志 | `dmesg`, `journalctl` | `journalctl -b -0`(查看本次启动日志) | | 内存转储文件 | `gdb`, `crash` | `gdb vmlinux core.dump` → `bt`(回溯堆栈) | | 二进制固件(.bin) | `objdump`, `hexdump` | `objdump -D -b binary -m arm uboot.bin` | | 寄存器/硬件状态 | 厂商调试工具、逻辑分析仪 | 配置示波器触发条件捕获异常信号 | --- ### 四、常见问题排查 1. **启动卡在 Bootloader 阶段**: - 检查 `bootloader last log` 中的设备初始化状态(如 DRAM 检测是否通过)。 - 确认启动介质(eMMC/SD)的连接和分区表。 2. **系统崩溃或无响应**: - 分析 `dump_report.txt` 中的异常类型(如 Oops、Panic)。 - 检查 `extend irqstack0` 是否存在中断死锁。 3. **DDR 稳定性问题**: - 对比 `extend ddr register dump` 与参考配置(检查时序参数)。 - 使用 Memtest86+ 测试内存完整性。 --- **附:快速诊断流程图** ``` 系统启动失败/崩溃 │ ▼ 查看 bootloader_pre log │ ▼ ┌─成功初始化硬件?─┬─否─→检查电源/时钟/复位信号 │ │ 是 ▼ 加载内核?─┬─否─→验证内核镜像完整性 │ │ 是 ▼ │ 检查extend cp assert ▼ 分析 dump_report.txt │ ▼ 根据错误类型定位 extend_xxx 文件 ``` 如需具体日志片段或硬件平台信息,可进一步针对性分析!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值