计算机组成原理
1、计算机发展计算机系统 = 硬件 + 软件
软件分为:
系统软件: 用来管理整个计算机系统的软件(操作系统、标准程序库、数据库管理系统、网络软件(如tcp/ip)、语言处理程序、服务程序(如:调试程序)等)
应用软件: 按任务需要编制的各种程序
早期的计算机是使用手动接线来控制的计算,冯·诺依曼提出了 “存储程序”的概念,即指令以二进制代码的形式事先输入计算机的主存储器中,计算机执行指令的过程就是从主存储器中取出指令并执行的过程。
冯·诺依曼计算机的结构特点1、计算机由五大部件组成。2、指令和数据以同等地位存于主存储器中,可按地址寻址。3、指令和数据用二进制表示。4、指令由操作码和地址码组成。5、存储程序。6、以运算器为中心。(输入/输出设备与存储器之间的数据通过运算器进行传输)
上面经过优化,将存储器放到中心,得到现代的计算机结构。
2、各个硬件的工作原理计算机中,cpu内部由主存储器,控制器,运算器构成
主存储器:由存储体,MAR(Memory Address Register)(存储地址寄存器)和MDR(Memory Data R ...
计算机网络
总览计算机的硬件组成结构(1、早期冯诺依曼计算机、2、现代计算机的结构)
1、计算机网络1.1、计算机网络概述计算机网络 :由若干结点和连接这些结点的链路组成互联网:isp:互联网服务提供商干的就是全世界的网络都连接起来,公众只需交网费就可以接入这个网络,必须使用tcp/ip。Internet互连网:由若干网络和连接这些网络的链路组成,可以使用其他协议。internet
集线器(hub):允许将多台计算机连接起来,实现数据共享。但是,集线器存在数据传输效率低、容易发生数据碰撞的问题。(工作物理层)多台设备同时发送时出现数据碰撞,导致数据丢失。
交换机:将数据包转发到目的主机,实现数据传输的高效。组建计算机网络。( 数据链路层)构建大的计算机网络就可以使用多台交换机。
路由器:可以将两个或者多个计算机网络连接起来,实现数据传输的高效,也称之为互连网。( 网络层)
这里的路由器和家用路由器有区别:家用路由器 = 路由器+交换机+其他功能
2、计算机网络组成了解就可以:
3、电路交换,报文交换,分组交换电路交换:通信主端端之间建立电路,数据传输。通信时间内,通讯线路被占 ...
ubuntu
文件目录linux目录从/开始/bin 大部分系统的命令/boot 引导文件,启动相关的目录/dev 设备文件目录,Linux下一切设备皆文件/etc:系统配置文件/home 用户目录,一个用户对应一个文件夹/lib 库文件/lib64 64位库文件/libx32 32位库文件/lost+found 文件系统错误恢复文件/media 媒体文件目录/mnt 挂载目录/opt 第三方软件安装目录/proc 虚拟文件系统,存放进程和内核信息/root 超级用户目录/run 运行目录/sbin 超级用户可执行文件/srv 服务器数据目录/sys 虚拟文件系统,存放硬件信息/tmp 临时文件目录/usr 用户程序目录/var 变量文件目录
1 、ubuntu 24.041-1、输入完密码或者安装完系统后黑屏两步:vmware关闭3D加速、配置grub文件
123456vim /e ...
应用代码库
调试篇1、log彩色打印命令
我们常用的printf函数输出来的颜色是终端的配色。
如果想要输出不同的颜色进行区分,
就需要用到printf的控制命令:\033[m。
控制命令以\033[开头,
以m结尾,
而中间则是属性码,
属性代码之间使用;分隔,
如\033[1;34;42m。而属性代码的含义见下面的表格
示例:
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <stdio.h>void printf_red(const char *s){ printf("\033[0m\033[1;31m%s\033[0m", s);}void printf_green(const char *s){ printf("\033[0m\033[1;32m%s\033[0m", s);}void printf_yellow(const char *s){ ...
技巧类
linux命令类和shell技巧类1、dd命令可以拷贝一切,内存,磁盘,当设备出现问题,可以通过dd命令将内存数据拷贝出,无敌。
2、软连接自己想要的软件直接到官网下载,或者交叉编译器可以直接使用此方法 。
1ln -s 【目标】 【链接到目标地址】
都是绝对地址。
另一种是设置环境变量的方式,设置的地址在/etc/profile
类似:export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
/usr/local/bin/放置了一些软件的启动地址。~/bashrc放置的是用户的一些个性化设置,也可以将环境变量放到里面。
bashrc的作用:1、可以在利用命名函数alias定制需要的指令;2、设定环境路径;3、提示符设置。
3、vim中w ! sudo tee %%为当前文件,上面的作用主要是缺少sudo时,可以直接采用上面命令保存vim,避免尴尬。
4、grep -nR可以查看引用的字符串5、find ./ ...
arm-A7中断
有时候我们很多文件需要链接到指定的区域,或者叫做段里面,比如在 Linux 里面初始化函数就会放到 init 段里面。因此我们需要能够自定义一些段,这些段的起始地址我们可以自由指定,同样的我们也可以指定一个文件或者函数应该存放到哪个段里面去。
要完成这个功能我们就需要使用到链接脚本,看名字就知道链接脚本主要用于链接的,用于描述文件应该如何被链接在一起形成最终的可执行文件。其主要目的是描述输入文件中的段如何被映射到输出文件中,并且控制输出文件中的内存排布。比如我们编译生成的文件一般都包含 text 段、 data 段等等。
链接脚本的语法很简单,就是编写一系列的命令,这些命令组成了链接脚本,每个命令是一个带有参数的关键字或者一个对符号的赋值,可以使用分号分隔命令。像文件名之类的字符串可以直接键入,也可以使用通配符“*”。最简单的链接脚本可以只包含一个命令“SECTIONS”,我们可以在这一个“SECTIONS”里面来描述输出文件的内存布局。我们一般编译出来的代码都包含在 text、 data、 bss 和 rodata 这四个段内,假设现在的代码要被链接到 0X10000000 这个地址 ...
uboot详解--初级
从事嵌入式音视频AI开发中,需要多次使用uboot这个bootleader,本文用来记述我工作学习中所学到的知识点和心得本文主要是为了能够运行起uboot,裁减后面有时间再学习。首先第一步,删除uboot目录下没有用的到的配置文件,太多了,不需要,架构和板子支持的没法动,删除就会出错。
链接脚本详解• 拿到半导体厂商给的uboot,进行第一次编译,编译后得到一个链接文件。从链接文件开始分析,链接的后缀为.lds在使用imx6ull进行编译时,要把程序的起点链接到0x878000000
1arm-linux-gnueabihf-ld -Ttext 0X87800000 -o ledc.elf $^
这样所有文件都会链接到这个地址区。
分析得到uboot程序启动入口为_start。
123OUTPUT_FORMAT( ("elf32-littlearm", , "elf32-littlearm", , "elf32-littlearm") )OUTPUT_ARCH(arm)ENTRY(_start)
•上面代码 ...
驱动编写(linux)
前置123456789101112131415161718192021222324252627282930查看设备节点驱动注册成功生成设备节点ls /dev/ 查看加载的设备查看设备号主设备号 cat /proc/devices 包括字符设备和块设备MISC设备驱动次设备号cat /proc/misc主次设备号等信息ls /dev/dev_name -al查看类class_create函数创建成功后,使用命令ls /sys/class查看查看设备device_create函数创建成功后,使用命令ls /dev/查看查看已加载的模块lsmod设备树查看设备树节点ls /proc/device-tree查看设备树属性在设备树相应目录下,cat [Properties]查看内核打印信息dmesg查看设备树节点ls /proc/device-tree
https://zhuanlan.zhihu.com/p/425420889 文章记录
1、字符设备1-1、加载驱动模块12比如insmod drv.ko
如果drv.ko设备存在了依赖关系,那么就必须先加载所依赖的模块, ...
cmake学习
学习自https://subingwen.cn/cmake/CMake-primer/。https://www.bilibili.com/video/BV14s4y1g7Zj/?p=3&spm_id_from=pageDriver&vd_source=a65f19543c0eb665983d7177bd50730e
!!!!!!编译过程中如果需要同时产出静态库和可执行程序或者动态库,一定要一步一步来,不要想着一次性调通,血泪
第一步本次用c++简单测试12345678$ tree结构.├── add.cpp├── div.cpp├── head.h├── main.cpp├── mult.cpp└── sub.cpp
1、 add.cpp1234567#include <stdio.h>#include "head.h"int add(int a, int b){ return a+b;}
2、sub.cpp1234567#include <stdio.h>#include "head.h ...
操作系统
1、操作系统概述操作系统概念:操作系统是系统资源的管理者,是管理计算机硬件与软件资源的计算机程序。提供给用户和其他软件方便易用的接口和环境。最接近硬件的软件。
例子用qq和朋友视频聊天step 1、在文件夹中找到qq安装位置(如d:/qq) — 逐层打开文健夹stpe 2、双击qq.exe — 需要把程序相关数据放入内存step 3、qq正常运行 —- 对应进程被处理机(cpu)处理step 4、qq聊天 — 需要将摄像头分配给进程
补充:执行一个程序前,需要将该程序放入到内存中,才能被cpu处理
作为系统资源的管理者,主要提供以下功能: 1 、处理机管理 2、存储器管理 3、文健管理 4、设备管理作为管理者向用户提供的接口:1、GUI图形管理界面 2、交互式命令接口 3、脱机批处理接口作为管理者向应用软件提供接口: 1、系统调用接口
操作系统作为最接近硬件的层次对硬件机器进行了扩展:将cpu、硬盘、磁盘、内存等硬件资源进行协调配合。实现了很多复杂的功能。
2、操作系统的特征
1、并发微观上交替执行,宏观上同时运行。与并行区别是两个或者多个时间同一时间发生。容易混淆。 ...