当前位置: 首页 > news >正文

PMON的解读和开发

提示:龙芯2K1000PMON相关记录

文章目录

  • 1 PMON的发展和编译环境
    • PMON
    • PMON2000
  • 2 PMON2000的目录结构
  • 3 Targets目录的组成
  • 4 PMON编译环境的建立
  • 5 PMON2000的框架
  • 6 异常向量表
  • 7 Pmon的空间分配
  • 8 PMON的汇编部分(starto.S或sbdreset.S)的解读
    • Start.S
    • C代码部分
    • dbginit
  • 9 Bonito的空间分配
  • 10 PCI的空间分配
  • 开发时需要注意的问题


1 PMON的发展和编译环境

PMON

  • 科大那个PMON就是这个版本的。该版本的功能有:shell, net, load, debug。不支持硬盘,显卡。并且扩展性不好。
  • 该版本的编译器是sde-gcc.

PMON2000

  • 现在龙芯1和2用的BIOS, 在原来的PMON的基础上添加了硬盘支持,文件系统ext2的支持,显卡的支持。修复了debug功能,扩展性也得到提高。比较容易移植到新的系统。
  • 编译器为mips-elf-gcc

2 PMON2000的目录结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 Targets目录的组成

每个系统一个目录,我们拿Bonito来为例子,主要有下列文件:

  • start.S 位于Targets/Bonito/Bonito目录下,是C环境建立之前的汇编代码,使整个BIOS运行的起点。
  • tgt_machdep.c位于Targets/Bonito/Bonito目录下,一些板子相关的函数。
  • pci_machdep.c进行Targets/Bonito/pci空间分配的一些函数
  • Targets/Bonito/dev目录下一些板子特殊的设备的驱动。
  • Targets/Bonito/conf目录下是一些编译环境建立需要的一些文件

4 PMON编译环境的建立

  • 将comp.tar.gz在/usr/local解开
  • 将/usr/local/comp/mips-elf/gcc-2.95.3/bin加入到PATH目录下
  • 进入pmon2000的tools目录下make,建立一些conf需要的工具。
  • 进入pmon2000的Targets/Bonito/conf目录中
  • 编辑conf目录下Bonito文件,选择需要编译的模块
  • tools/pmoncfg/pmoncfg Bonito(conf类型文件)。形成目标主目录下的compiler目录
  • 进入Targets/Bonito/compiler/Bonito的目录,make形成pmon。
  • Makefile是根据Targets/Bonito/conf/Makefile.Bonito文件形成的。
  • 链接脚本是为Targets/Bonito/conf/ld.script。

5 PMON2000的框架

在这里插入图片描述

6 异常向量表

在这里插入图片描述

7 Pmon的空间分配

在这里插入图片描述

8 PMON的汇编部分(starto.S或sbdreset.S)的解读

在这里插入图片描述

Start.S

当整个板子起电后,CPU将从0xBFC00000取指令开始执行,而ROM在系统中的地址就是从该地址开始的,所以其中的第一条指令就是整个CPU的第一个指令,在MIPS中,异常处理入口有两套,通过CP0的STATUS寄存器位BEV来决定,当BEV=1时,异常的入口地址为0xBFC00000开始的地址,而BEV=0,异常地址为0x80000000开始的地址,所以PMON程序段开始处是一些异常的调入口,需要跳过这段空间,程序通过一个跳转bal指令跳到后面.

       bal     locate nopbal		uncachednopbal		locatenop	
uncached:or      ra, UNCACHED_MEMORY_ADDRj       ranop

此处是可以从cache空间转换到uncache的空间,ra中保留的是bal locate这条指令的地址,然后或上UNCACHED_MEMORY_ADDR,该地址就变成uncache的地址了.

  la      s0, start            subu    s0, ra, s0and     s0, 0xffff0000 

这段代码是为了访问数据,因为这段汇编在Rom执行,而编译出来的数据段在0x8002xxxx,为了能够访问数据段的数据,需要进行一个地址的修正,s0这是起到这种修正的目的。

  • 初始化CPU内的寄存器,清TLB.
  • 初始化一些北桥的基本配置,以确保uart能够正常工作.
  • 初始化uart,主要是设置波特率.
  • 初始化内存(主要通过I2C协议从内存的EEPROM读取内存参数来进行设置).
  • 初始化cache.
    拷贝pmon的代码到内存,然后通过
la      v0, initmips
jalr    v0
nop 

从此代码便到内存中间去了,从这开始因为可以读写内存,所以有了栈,故可以用C的代码了,所以以后的程序便是C代码了.

C代码部分

Ram中运行,入口为initmips
在文件Targets/Boniton/Bonito/tgt_machdep.c中

void initmips(unsigned int memsz)
{tgt_cpufreq();cpuinfotab[0] = &DBGREG;dbginit(NULL);bcopy(MipsException, (char *)TLB_MISS_EXC_VEC, MipsExceptionEnd - MipsException);bcopy(MipsException, (char *)GEN_EXC_VEC, MipsExceptionEnd - MipsException);CPU_FlushCache();CPU_SetSR(0, SR_BOOT_EXC_VEC);main();
}

主要初始化在dbginit函数中执行。

dbginit

 void dbginit (char *adr)
{__init();       /* Do all constructor initialisation */envinit ();                                                                                                                   tgt_devinit();                                                                                                                        
#ifdef INETinit_net (1);
#endif                                                                                                                        
#if NCMD_HIST > 0histinit ();
#endif
#if NMOD_SYMBOLS > 0syminit ();
#endif#ifdef DEMOdemoinit ();
#endif                                                                                                          initial_sr |= tgt_enable (tgt_getmachtype ());                                                                                                             
#ifdef SR_FRStatus = initial_sr & ~SR_FR; /* don't confuse naive clients */
#endifioctl(STDIN, TCGETA, &consterm);
...
...
...
}//gdbinit 
 __init();初始化一些数据结构.
Envinit ();初始化环境变量.
tgt_init();初始化与板级相关的过程,在我们系统中主要是初始化北桥和PCI.
inet_init();初始化网络.
Hisinit();初始化命令历史记录.
Ioctl(STDIN,TCGETA,&consterm);建立终端.	

9 Bonito的空间分配

在这里插入图片描述

10 PCI的空间分配

tgt_devinit()
_pci_businit()
_pci_hwinit
pci_hwinit() 为Pmon主要初始化PCI在北桥的窗口的函数 ,这个函数在Target/Ev64240/pci/pci_machdep.c中定义

    pd = pmalloc(sizeof(struct pci_device));pb = pmalloc(sizeof(struct pci_bus));                                                                                                                   pd->pa.pa_flags = PCI_FLAGS_IO_ENABLED | PCI_FLAGS_MEM_ENABLED;pd->pa.pa_iot = pmalloc(sizeof(bus_space_tag_t));pd->pa.pa_iot->bus_reverse = 1;pd->pa.pa_iot->bus_base = PCI0_IO_SPACE_BASE - PCI0P_IO_SPACE_BASE;pd->pa.pa_memt = pmalloc(sizeof(bus_space_tag_t));pd->pa.pa_memt->bus_reverse = 1;pd->pa.pa_memt->bus_base = 0;pd->pa.pa_dmat = &bus_dmamap_tag;pd->bridge.secbus = pb;_pci_head = pd;pb->minpcimemaddr  = PCI0P_MEM_SPACE_BASE;pb->nextpcimemaddr = PCI0P_MEM_SPACE_BASE + PCI0_MEM_SPACE_SIZE;pb->minpciioaddr  = PCI0P_IO_SPACE_BASE;pb->nextpciioaddr = PCI0P_IO_SPACE_BASE + PCI0_IO_SPACE_SIZE;pb->pci_mem_base   = PCI0_MEM_SPACE_BASE;pb->pci_io_base    = PCI0_IO_SPACE_BASE;

建立PCI的空间分配的数据结构.其中pci_mem_base为Memory空间的基地址,pci_io_base 为IO空间的基地址. minipciioaddr 为IO空间的最小可以分配地址, minipcimemaddr 为 Memory 空间的最小可以分配地址. nextpcimemaddr 为PCI的 Memory 空间的下一个分配地址, nextpciioaddr 为PCI的IO空间的下一个分配地址,在pmon的中地址分配是逆序分配的.

pb->max_lat = 255;
pb->fast_b2b = 1;
pb->prefetch = 1;
pb->bandwidth = 4000000;
pb->ndev = 1;
_pci_bushead = pb;
_pci_bus[_max_pci_bus++] = pd;

开发时需要注意的问题

  • Debug的方法
    – 在串口设备没有初始化前, 利用逻辑分析仪进行测试。该方法debug很艰难,所以应该尽早初始化串口。
    – 串口工作后,可以利用串口进行类似printf的Debug方法。
    – 初始化BIOS系统的Shell后,可以利用BIOS系统中的Debug系统进行测试。
  • 地址空间是否正确,北桥上的窗口分配是否正确。
  • 中断问题。
  • 充分利用Pmon所带的调试手段。pmon>h可以看到pmon提供的命令,通过这些命令来检查地址分配是否正确。

相关文章:

PMON的解读和开发

提示:龙芯2K1000PMON相关记录 文章目录 1 PMON的发展和编译环境PMONPMON2000 2 PMON2000的目录结构3 Targets目录的组成4 PMON编译环境的建立5 PMON2000的框架6 异常向量表7 Pmon的空间分配8 PMON的汇编部分(starto.S或sbdreset.S)的解读Start.SC代码部分dbginit 9 …...

初识c++(构造函数,析构函数,拷贝构造函数,赋值运算符重载)

一、类的默认函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。 #include<iostream> using namespace std; class Date { public:Date(){_year 1;_month 1;_day 1;cout << _year << "/" <&…...

CANoe:为什么两个VLAN接口不能设置同一个网络的IP地址呢?

经常玩CANoe的人应该配置过TCP/IP Stack中网络节点的网卡信息&#xff0c;基本的信息包含&#xff1a;MAC地址、IP地址、子网掩码、默认网关、MTU值、IPv6地址。 如果你想让发送出去的报文携带VLAN tag&#xff0c;可以在网卡上添加VLAN tag信息。 此时你就能得到两个新的网卡V…...

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以在…...

性能测试的流程(企业真实流程详解)(二)

性能测试的流程 1.需求分析以及需求确定(指标值&#xff0c;场景&#xff0c;环境&#xff0c;人员) 一般提出需求的人员有&#xff1a;客户&#xff0c;产品经理&#xff0c;项目组领导等 2.性能测试计划和方案制定 基准测试: 负觋测试: 压力测试: 稳定性测试: 其他:配置测试…...

使用sklearn的基本流程

scikit-learn&#xff0c;通常简称为 sklearn&#xff0c;是一个开源的Python库&#xff0c;是基于 Python 编程语言的一个非常流行的机器学习库。它建立在 NumPy 和 SciPy 这两个科学计算库之上&#xff0c;并与 Matplotlib 配合使用&#xff0c;为数据预处理、模型训练、评估…...

力扣题解(乘积为正数的最长子数组长度)

1567. 乘积为正数的最长子数组长度 已解答 中等 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 本题要求乘积为正数&#xff0c;而整…...

PPTP、L2TP、IPSec、IPS 有什么区别?

随着互联网的发展&#xff0c;保护网络通信的安全越来越重要。PPTP、L2TP、IPSec、IPS是常见的网络安全协议和技术&#xff0c;在保护网络通信安全方面发挥着不同的作用和特点。下面介绍PPTP、L2TP、IPSec、IPS之间的区别。 点对点隧道协议&#xff08;PPTP&#xff09;是一种用…...

SpringBoot注解--11--@JSONField @JsonProperty

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一个问题&#xff1a;后端实体类isXXX开头的属性&#xff0c;传到前端后自动去掉is解决方法&#xff1a; JsonProperty和JSONField1.简介2.注解的区别2.1 底层框架不…...

C语言 | Leetcode C语言题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){int dp[301][301]{0};int wid0;if(matrixSize0&&matrixColSize[0]0){return 0;}for(int i0;i<matrixSize;i){for(int j0;j<matrixColSize[0];j){if(m…...

AI数据服务如何驱使AI商业化,实现在各行业落地融合

AI技术经历数十载的发展&#xff0c;正在加速向各行各业渗透。近年来深度学习加速了人工智能技术的商业化落地的同时&#xff0c;也带来了大量AI算法训练需求&#xff0c;推动AI数据服务市场的快速增长。作为AI快速发展的“基石”&#xff0c;AI数据服务AI数据服务如何驱使AI在…...

户用光伏项目开发流程

1、收集业主信息 管理业主基本信息&#xff0c;包括但不限于联系方式、地址、房屋信息等。 2、业主开卡 每户都需要办理银行卡&#xff0c;用于电费结算和划转。 3、合同签约 业主开卡完成之后&#xff0c;平台方发起签约&#xff08;支持线上签约&#xff09;&#xff0c…...

C++ 函数返回值是引用类型使用场景

目录 1、希望返回函数内部的局部静态变量或全局变量 2、希望通过函数返回一个对象的成员变量 3、希望实现链式操作 4、避免对象的拷贝 5、需要注意的事项 在C中&#xff0c;函数的返回值可以是引用类型的情况主要有以下几种&#xff1a; 1、希望返回函数内部的局部静态变…...

CUDA原子操作

代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值&#xff0c;确保是加法后的值addedValue *valueToAd…...

08.C2W3.Auto-complete and Language Models

往期文章请点这里 目录 N-Grams: OverviewN-grams and ProbabilitiesN-gramsSequence notationUnigram probabilityBigram probabilityTrigram ProbabilityN -gram probabilityQuiz Sequence ProbabilitiesProbability of a sequenceSequence probability shortcomingsApproxi…...

【linux】log 保存和过滤

log 保存 ./run.sh 2>&1 | tee -a /home/name/log.txt log 过滤 import os import re# Expanded regular expression to match a wider range of error patterns error_patterns re.compile(# r(error|exception|traceback|fail|failed|fatal|critical|warn|warning…...

GeoTrust ——适合企业使用的SSL证书!

GeoTrust是一家全球知名的数字证书颁发机构&#xff08;CA&#xff09;&#xff0c;其提供的SSL证书非常适合企业使用。GeoTrust的SSL证书为企业带来了多重优势&#xff0c;不仅在验证级别、加密强度、兼容性、客户服务等方面表现出色&#xff0c;而且其高性价比和灵活的证书选…...

Kubelet 认证

当我们执行kubectl exec -it pod [podName] sh命令时&#xff0c;apiserver会向kubelet发起API请求。也就是说&#xff0c;kubelet会提供HTTP服务&#xff0c;而为了安全&#xff0c;kubelet必须提供HTTPS服务&#xff0c;且还要提供一定的认证与授权机制&#xff0c;防止任何知…...

aws slb

NLB 目标组 Target is in an Availability Zone that is not enabled for the load balancer 解决&#xff1a; https://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html 负载均衡器添加 后端EC2 所在的vpc网段即可。…...

【AI大模型】ChatGPT-4 对比 ChatGPT-3.5:有哪些优势

引言 ChatGPT4相比于ChatGPT3.5,有着诸多不可比拟的优势&#xff0c;比如图片生成、图片内容解析、GPTS开发、更智能的语言理解能力等&#xff0c;但是在国内使用GPT4存在网络及充值障碍等问题&#xff0c;如果您对ChatGPT4.0感兴趣&#xff0c;可以私信博主为您解决账号和环境…...

详解yolov5的网络结构

转载自文章 网络结构图&#xff08;简易版和详细版&#xff09; 此图是博主的老师&#xff0c;杜老师的图 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; ba…...

汽车零配件行业看板管理系统应用

生产制造已经走向了精益生产&#xff0c;计算时效产出、物料周转时间等问题&#xff0c;成为每一个制造企业要面临的问题&#xff0c;工厂更需要加快自动化&#xff0c;信息化&#xff0c;数字化的布局和应用。 之前的文章多次讲解了企业MES管理系统&#xff0c;本篇文章就为大…...

【Go】函数的使用

目录 函数返回多个值 init函数和import init函数 main函数 函数的参数 值传递 引用传递&#xff08;指针&#xff09; 函数返回多个值 用法如下&#xff1a; package mainimport ("fmt""strconv" )// 返回多个返回值&#xff0c;无参数名 func Mu…...

宝塔面板运行Admin.net框架

准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04&#xff08;本贴使用的是Ubuntu20.04版本系统&#xff09; Admin.net开发框架 先安装好服务器系统&#xff0c;这里就不做安装过程描述了&…...

Javaweb11-Filter过滤器

Filter过滤器 1.Filter的基本概念&#xff1a; 在Java Servlet中&#xff0c;Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。 2.Filter常见的API F…...

【AI-7】CUDA

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA公司开发的一种并行计算平台和编程模型&#xff0c;使开发者能够利用NVIDIA GPU的强大计算能力来加速各种应用。以下是关于CUDA的详细介绍&#xff1a; CUDA的特点 并行计算&#xff1a;CUDA允许开发…...

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染&#xff0c;一个是 png&#xff0c;一个是 jpg 目录 1、web164 2、web165 二次渲染&#xff1a; 网站服务器会对上传的图片进行二次处理&#xff0c;对文件内容进行替换更新&#xff0c;根据原有图片生成一个新的图片&#xff0c;这样…...

基于实现Runnable接口的java多线程

Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行&#xff0c;以及应用场景。 一、应用场景 异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。 以下…...

如何在uniapp中使用websocket?

websocket是我们经常使用到的接口,通常用于即时通讯以及K线图这种需要实时更新数据的业务需求上,传统的restful接口虽然可以满足,但是你需要轮询,这就要额外写一堆代码,不是很方便,用websocket就简单很多,我们来看代码 第一步定义全局常量、变量 const config = {host…...

PCL 点云PFH特征描述子

点云PFH特征描述子 一、概述1.1 概念1.2 算法原理二、代码实现三、结果示例一、概述 1.1 概念 点特征直方图PFH(Point Feature Histograms)描述子:用于表示点云中每个点的局部几何形状信息,它是一种直方图描述子,包括了点云的法线方向和曲率信息,PFH描述子可以帮助区分不同…...

扬州品牌网站设计/友链购买有效果吗

这本书是2016年8月出版的&#xff0c;一年半之后再看&#xff0c;虽然AI风口已过&#xff0c;但是由此延伸而来的概念正在引导出更深的内涵。 何谓大数据&#xff1f;作者的观点是体量大、维度高、及时性强。 为了说明数据的威力&#xff0c;书中举了许多例子。印象最深的一个是…...

学习建设网站书籍/网站怎么推广

异常处理 1. 什么是异常处理 异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止 异常包含三个部分: 1. traceback异常的追踪信息2. 异常的类型3. 异常的信息 错误分为两大类: 1. 语法上的错误:在程序…...

腾讯做的购物网站/发帖推广百度首页

好久没写博客了&#xff0c;由于公司要做android&#xff0c;笔者也是第一次接触。 这是在项目中遇到一个比較麻烦的问题。记录下来备忘&#xff08;本人刚接触。有不正确的地方请不吝赐教&#xff09;。 发送请求的代码&#xff1a; package com.jiujian.mperdiem;import java…...

网站制作网页版/百度排名优化软件

一、Java语言特点Java是一种简单、面向对象、分布式、易读、鲁棒、安全、结构明晰、可移植、高性能、多线程、动态的语言。面向对象(继承、封装、多态)一次编译&#xff0c;到处运行(JVM实现跨平台运行)可靠性安全性支持多线程(对比C没有内置多线程机制)etc...二、Java为什么不…...

沈阳做网站公司有哪些/黑马程序员培训机构在哪

知识和技能 知道电功率表示消耗电能快慢&#xff0c;知道电功率的单位是瓦。 会用功率的计算公式PW/t进行简单的计算。 会用功率的计算公式PUI进行简单的计算。 这世上最累的事情&#xff0c;莫过于眼睁睁看着自己的心碎了&#xff0c;还得自己动手把它粘起来。过程和方法…...

腾讯云网站搭建/网站建设制作专业

在折线图上&#xff0c;每两个标记点的显示距离都是一样的&#xff0c;不管实际的间隔&#xff0c;100-1000和1000-10000 在坐标轴上的显示距离都一样 所以如果你给的标记点本身是等距的&#xff0c;如1月 2月 3月 4月 5月。。。那他显示效果和散点图基本是一样的 但如果标记点…...