文章目录
- 1、快捷键
- 2、专业名词
-
- 2.1、驱动
- 2.2、内核
- 2.3、U-Boot
- [2.4、Dynamic Library and Static Library](#2.4、Dynamic Library and Static Library)
- [2.5、SDK / NDK / UDK](#2.5、SDK / NDK / UDK)
- 3、BUG
前文链接: 【Linux】learning notes
1、快捷键
在文件夹里,ctrl+l
,选定文件夹路径
py
在linux的命令模式下使用ctrl组合键能让操作更便捷。
ctrl + k -- 剪切光标及其后边的内容;
ctrl + u -- 剪切光标之前的内容;
ctrl + y -- 在光标处粘贴上两个命令,粘贴方式和被剪切方式相同;
ctrl + c -- 结束正在运行的程序或命令;
ctrl + d -- 结束当前命令窗口;
ctrl + r -- 输入关键字可弹出曾经用过的指令, 可以输入进行模糊搜索;
ctrl + l -- 清屏;(和clear效果相同)
ctrl + a -- 光标切换到行开头;
ctrl + e -- 光标切换到行尾。
2、专业名词
2.1、驱动
驱动:驱动本质上是软件代码,其主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。如果一个硬件设备没有驱动程序,只有操作系统是不能发挥特有功效的,也就是说驱动程序是介于操作系统与硬件之间的媒介,实现双向的传达,即将硬件设备本身具有的功能传达给操作系统,同时也将操作系统的标准指令传达给硬件设备,从而实现两者的无缝连接
2.2、内核
linux 内核:操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统 ,在Linux的术语中被称为"内核",也可以称为"核心"。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
2.3、U-Boot
U-Boot,全称 Universal Boot Loader,是一个主要用于嵌入式系统的引导加载程序。
一、概述
U-Boot是一个开放源码项目,遵循 GNU 通用公共许可证(GPL)条款。它支持多种不同的计算机系统结构,包括 PPC、ARM、AVR32、MIPS、x86、68k、Nios 与 MicroBlaze 等。此外,U-Boot 还支持多种嵌入式操作系统,如 Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS 以及 Android 等。
二、特点
- 开放源码:U-Boot 遵循 GPL 条款,源代码公开,可以自由获取和修改。
- 多系统支持:支持多种嵌入式操作系统内核和处理器系列。
- 高可靠性和稳定性:经过长期的发展和完善,U-Boot 具有较高的可靠性和稳定性。
- 灵活的功能设置:适合 U-Boot 调试、操作系统不同引导要求、产品发布等。
- 丰富的设备驱动:提供串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等设备的驱动支持。
- 丰富的开发调试文档与技术支持:为开发者提供了丰富的文档和强大的技术支持。
三、主要功能
- 系统引导:支持 NFS 挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持从 FLASH 中引导压缩或非压缩系统内核。
- 基本辅助功能:提供强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作系统。
- CRC32校验:用于校验 FLASH 中内核、RAMDISK 镜像文件是否完好。
- 设备驱动支持:提供多种外设的驱动支持,方便进行外设功能测试。
- 上电自检:支持 SDRAM、FLASH 大小自动检测以及 SDRAM 故障检测等功能。
四、工作模式
U-Boot 的工作模式主要包括启动加载模式和下载模式。
- 启动加载模式:这是 Bootloader 的正常工作模式。在嵌入式产品发布时,Bootloader 必须工作在这种模式下。它会自动将嵌入式操作系统从 FLASH 中加载到 SDRAM 中运行。
- 下载模式:在这种模式下,Bootloader 可以通过某些通信手段将内核映像或根文件系统映像等从 PC 机中下载到目标板的 FLASH 中。用户可以利用 Bootloader 提供的一些命令接口来完成自己想要的操作。
五、源码结构与编译
U-Boot 的源码结构通常包括多个子目录,如 api、arch、board、boot、cmd、common、configs、disk、doc、drivers 等。每个子目录都包含与特定功能相关的代码和文件。
编译 U-Boot 通常需要进入根目录,使目标板的默认配置生效,然后执行 make 命令来启动编译过程。编译完成后,会在根目录下生成 u-boot.bin 可执行二进制文件。
六、应用场景
U-Boot 广泛应用于各种嵌入式系统中,特别是那些需要高度可靠性和稳定性的场景。例如,在智能家居、工业自动化、医疗设备等领域中,U-Boot 都发挥着重要的作用。
综上所述,U-Boot 作为一个功能强大且灵活的引导加载程序,在嵌入式系统领域具有广泛的应用前景。
uboot 经过多年发展,已经成为事实上的业内 bootloader 标准。现在大部分的嵌入式设备都会默认使用 uboot 来做为 bootloader。
嵌入式Linux移植和Uboot(一):Bootloader介绍,U-boot介绍(特点,目录结构)
嵌入式开发岗招聘老是在说的精通uboot和内核裁剪,到底是裁剪了什么?
2.4、Dynamic Library and Static Library
动态库(Dynamic Library)和静态库(Static Library)是软件开发中常用的两种库类型,它们在多个方面存在显著差异。
一、定义与用途
-
静态库:
- 静态库是软件开发中常用的一种库文件形式,它包含了一组预编译的目标文件(.o文件或.obj文件),这些目标文件中包含了函数和数据,可以被程序调用和使用。
- 静态库的主要用途是共享代码,即将一些公共代码编译为库文件,在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。
-
动态库:
- 动态库也被称为共享库(Shared Library),在程序运行时才被加载到内存中,它包含了函数和数据,可以被多个程序共享。
- 动态库的主要目的是节省资源,因为多个程序可以共享同一个动态库,从而显著节省内存和磁盘空间。
二、编译与链接方式
-
静态库:
- 在编译过程中,静态库中的代码会被完整地复制到目标程序中。
- 因此,生成的可执行文件通常会比使用动态库时更大,因为它包含了库的所有代码。
-
动态库:
- 在编译时,动态库不会被链接到目标程序中,而是在程序运行时由操作系统动态加载到内存中。
- 因此,生成的可执行文件通常比使用静态库时小很多,因为它只包含对动态库中函数的引用。
三、内存占用与资源共享
-
静态库:
- 静态库在程序运行时会被完整地加载到内存中。
- 如果多个程序都使用同一个静态库,那么每个程序都会有一份库代码的拷贝,这会导致内存和磁盘空间的浪费。
-
动态库:
- 动态库允许库的代码在内存中共享。
- 所有使用同一动态库的程序都共享同一份代码,从而节省了内存和磁盘空间。
四、可维护性与更新
-
静态库:
- 如果静态库中的代码需要更新,所有使用该库的可执行文件都需要重新编译。
- 这增加了维护的复杂性。
-
动态库:
- 如果动态库中的代码需要更新,只需要替换相应的动态库文件即可。
- 这无需重新编译所有使用该库的可执行文件,从而简化了升级过程。
五、适用场景
- 静态库:
- 适用于对执行文件大小没有严格限制、需要在没有库文件的机器上运行或需要避免动态链接带来的依赖性的场景。
- 动态库:
- 适用于需要多个程序共享库代码、希望节省内存和磁盘空间或需要方便地进行库代码升级和维护的场景。
2.5、SDK / NDK / UDK
SDK、NDK、UDK都是软件开发中的工具或工具包,它们在软件开发过程中扮演着不同的角色。以下是关于这三者的详细介绍:
一、SDK(Software Development Kit)
SDK,即软件开发工具包,是软件开发人员为特定的软件包、应用程序、硬件平台、操作系统等建立应用软件时的开发工具集合。它通常包括一系列用于开发、测试、调试和部署应用程序的工具和库。
核心组件:SDK 的核心组件可能包括编译器、调试器、模拟器、虚拟设备管理器等,以及一系列API和库,如 Android SDK 中的 Android Debug Bridge(ADB)、Android Studio、Android Emulator等。
用途:SDK 使开发人员能够更高效地创建和测试应用程序,而无需从头开始编写所有代码。例如,Android SDK 允许开发人员使用 Java 或 Kotlin 等语言编写 Android 应用程序,并提供丰富的API 和工具来简化开发过程。
SDK使开发人员可以更轻松地使用底层技术来创建应用程序,而无需深入了解底层技术的细节。开发人员可以使用SDK提供的API和库来访问平台特定的功能和服务,从而更快地构建高质量的应用程序。同时,SDK还可以提供开发文档和示例代码,使开发人员能够更容易地理解和使用SDK。
作者:老黄谈支付
链接:https://www.zhihu.com/question/588406707/answer/2938683658
来源:知乎
二、NDK(Native Development Kit)
NDK,即本地开发工具包,允许开发人员使用 C/C++ 等原生代码编写 Android 应用程序的部分或全部代码。
核心组件:NDK的核心组件包括一系列C/C++库、交叉编译器、库生成器等,以及用于与Java代码进行交互的JNI(Java Native Interface)。
用途:使用NDK,开发人员可以编写高性能、低延迟的应用程序,如游戏引擎、音频处理器、图形渲染器等。此外,NDK还允许开发人员访问底层系统资源,如内存、文件系统等。
注意事项:虽然NDK可以为应用程序带来更好的性能和更高的灵活性,但同时也增加了应用程序的开发和维护成本。因此,在使用NDK之前,开发人员应该仔细评估是否真正需要使用原生代码。
为什么说使用 NDK 开发 Android 应用几乎对性能没有帮助?
Android ndk学习必要性?学习方法? - hanpfei的回答 - 知乎
https://www.zhihu.com/question/36180948/answer/68799984
三、UDK(Unreal Development Kit)
UDK,即虚幻开发套件,是由 Epic Games 开发的一款强大的游戏开发工具。
核心组件:UDK提供了丰富的工具和功能,如3D渲染、物理模拟、人工智能、动画系统等,以及一个强大的关卡编辑器和资源管理器。此外,它还支持使用UnrealScript(一种基于类的脚本语言)来编写游戏逻辑和交互。
用途:UDK允许开发人员创建高品质的游戏,并提供高度的自定义性和创造力。开发人员可以使用UDK的工具和功能来创建游戏世界、角色、物体等,并通过脚本编程和蓝图系统来实现各种想象力的设计和创意。
社区支持:UDK有一个庞大的开发者社区,开发者可以在社区中获取支持、分享经验和资源,这极大地方便了UDK编程的学习和开发。
3、BUG
解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22' not found
libstdc++.so.6.0.22 下载
解决libstdc++.so.6: version `GLIBCXX_3.4.22' not found
更多关于 python 的文章可以参考 【Python】