- 博客(23)
- 资源 (1)
- 收藏
- 关注
原创 QEMU工程编译错误解决
一 背景在ubuntu16.04新系统没有运行过qemu,这时候configure qemu工程会有一些错误,本文列出解决方法。二 问题及解决1. ERROR: glib-2.40 gthread-2.0 is required to compile QEM解决方法:sudo apt-get install libglib2.0-dev2. ERROR: pixman >...
2020-02-29 11:59:48
3852
转载 github下载太慢怎么办
一、git shallow clonegit clone默认会下载项目的完整历史版本,如果你只关心最新版的代码,而不关心之前的历史信息,可以使用 git 的浅复制功能: 1 $ git clone --depth=1 https://github.com/bcit-ci/CodeIgniter.git --depth=1表示只下载最近一次的版本,...
2019-07-20 11:02:21
2183
原创 PCTarget Initiated Termination
一、背景PCI传输都是主设备发起,然后从设备相应。但是当某些时候从设备发现自己忙着暂时来不及处理、或者处理一半时候发现后边req来得太快了暂时不能处理、或者从设备遇到了一个致命的错误不能完成这个req,就需要报告给主设备,让主设备稍后重传或者放弃传输。二、3种Termination方式1. Retry(1)定义:在cmd周期结束后的第一个数据周期,收到命令的从设备发现自己忙着,暂时...
2019-07-11 16:55:19
352
原创 QEMU内存管理
QEMU内存管理1 QEMU中管理的Memory有:普通的RAM。 MMIO。 内存控制器(将物理内存动态的映射到不同的虚拟地址空间)2 QEMU的Memory是以一个MemoryRegin为节点组成的非循环图的形式组织的。叶子节点代表RAM、MMIO。 其它节点代表buses、内存控制器、以及被rerouted的memory regions。3 Memory regions...
2019-03-28 11:05:02
685
原创 C/C++多线程常见问题
1 问题1.1 创建线程后是否立马开始并行执行?答: 主线程创建了子线程之后, 后者并不是立即就开始运行了. 至少在Linux操作系统下:(1)子线程和主线程运行在一个core上, 那还需要等待主线程交出core控制权, 可能是时间片耗尽.(2)子线程和主线程运行在不同的core上, 在时间轴上主线程后边的代码也可能先于子线程中的代码执行.因此要考虑之间的同步....
2018-12-24 16:14:12
1048
原创 UEFI EDK2开发环境设置关键点/修改环境变量
1 问题描述Linux下当修改了已经编译过的EDK2工程顶层路径后, 进入工程顶层路径source edksetup.sh会报错.2 解决步骤有一个隐藏问题非常容易被忽视, 那就是EDK2工程的环境变量可能还是原来的旧的. 这时候:(1) 进入工程运行.edksetup.sh这时候会自动重新设置下边三个环境变量,可以看一下这三个变量是不是正确指向当前工程:用echo $环境变量...
2018-12-21 17:45:43
1168
原创 linux静态库.a使用常见错误
在linux中如果一个程序需要用到.a, 有以下几点需要注意:(1)如果x.o与y.o中用到了静态xx.a中的函数, 不能用gcc xx.a -o test x.o y.o这种方式编译, 会提示那些函数undefined. 正确的做法是gcc -o test x.o y.o xx.a, 即把静态.a库文件放到.o的后边.(2) xx.a(jsc_debug.o): relocation R...
2018-12-21 17:34:30
1052
原创 c++常错语法
1.new T()代表创建一个T类的对象指针,new T[]标识创建T类对象数组指针。2.template模板类只能把成员函数都定义在.h中,分开.h和.cpp会报链接错误。3.类A:的成员变量包含B的对象B b,则A的构造函数中需调用B的构造函数:A::A():b(8) {......}...
2018-12-08 15:24:59
140
原创 c语言如何调用c++(本文从qemu开发中总结)
背景:有时候一个工程中有c语言编写的代码(.c),也有c++(.cpp)编写的,分别用c语言编译器(这里指gcc)和c++编译器(g++)编译.c语言调用c++中的函数.注:这种情形多出现在以下情况,一个较成熟的大型开源c语言工程,需要在其中添加一些c++特性的函数(仅验证了下边的例子)或者库(对于库还未验证).举例说明:添上红色部分代码就可以了(必须都加上).主要是要使用extern "...
2018-11-16 16:20:40
600
转载 qemu tcg代码执行流程
转自: http://blog.youkuaiyun.com/alloc7/article/details/7719823一.qemu简介 qemu是使用动态二进制翻译的cpu模拟器,它支持两种运行模式:全系统模拟和用户态模拟。在全系统模拟下,qemu可以模拟处理器和各种外设,可以运...
2018-10-26 15:58:40
3278
转载 转载:malloc和free底层实现
转载:malloc和free底层实现内存管理内幕Linux内存管理:Malloc本文引用了下面这篇文章,读完下面,应该读下上面两篇文章,其中,《内存管理内幕》提供了一个简单的malloc/free实现版本。看看它的free设计,相信有足够的吸引力(gnu free版本远比这复杂)该篇文章基本把malloc与free的实现机制说清...
2018-10-26 09:27:24
167
原创 Qemu使用心得
使用Qemu的心得体会如下:(1)在QEMU源码中增加自己的.c实现,编译后出现很多个错误如:“error: storage class specified for parameter”。其实只要在实现的.c文件最前面加上如下头文件就可以了:#include "qemu/osdep.h"。(2)QEMU下Application打印信息不全的问题:QEMU启动参数增加串口重定向:-serial fi...
2018-06-22 18:43:22
919
原创 System verilog的DPI通信使用心得
System verilog和C语言进行DPI通信常见问题及使用心得:(1)SV使用压缩结构存储结构体,定义时需加packed修饰符,否则与DPIC传递结构数据出错;(2)SV调用.c函数的形参必须为指针,否则值无法传递;SV调用.c函数的形参必须为指针,否则值无法传递;(3)SV和C语言共享数组的用法用伪代码描述如下:void c_function(int *d, int len) { f...
2018-06-22 18:30:04
3848
原创 c语言信号量使用心得体会
1、选用什么标准的信号量在Linux中信号量有两种标准,一种是System V,另一种是Posix标准。其中System V是早期的标准;Posix(Portable Operating System Interface )是一个由IEEE开发的一系列标准,它还是由ISO(国际标准化组织)和IEC(国际电工委员会)采纳的国际标准。而System v是Unix操作系统众多版本的一个分支。...
2018-06-22 18:19:11
4525
原创 c语言如何释放一个被阻塞住的线程
问:在c语言中,使用pthread_create创建线程。在线程中阻塞函数导致其阻塞的时候,如何退出线程?答:线程退出方式:(1)正常顺序执行完后return;(2)在线程内部自身调用pthread_exit();这两种方式都依赖于线程函数自身执行,如果线程遇到阻塞函数被阻塞,则不能继续执行,则无法满足上述条件。(3)使用pthread_cancel()函数:该函数在cancle point处能退...
2018-06-22 17:17:27
5400
转载 《C语言中分配了动态内存后一定要释放吗?》
问:比如main函数里有一句 malloc(),后面没有free()1.那么当main结束后,动态分配的内存不会随之释放吗?2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑?答:1. 就算没有free(),main()结束后也是会自动释放malloc()的内存的,这里监控者是操作系统,设计严谨的操作系统会登记每一块给每一个应用程序分配的内存,这使得它能够在应用程序...
2018-05-17 09:55:50
3849
原创 Linux下开发调试中大型C语言代码-如何提高效率
背景:在Linux下开发中大型C语言程序(包括编写、编译调试等步骤)时,尤其大部分代码都是原创的情况下。以下的 经验往往能提高调试效率。经验:(1)Linux命令行中编译错误较多,导致屏幕不能显示出所有的错误信息。可使用如下命令将编译信息输出到文件中:make > make.log 2 >& 1注:这里以make作为例子,实际中也可以是其它编译命令。输出的文件名“make.log”
2017-12-18 10:11:43
686
原创 C/C++语言static修饰函数的作用
描述:在C/C++语言程序中,特别是的大型程序,当中的函数往往用static关键词修饰。原因:主要的原因是避免命名冲突。static函数与一般函数作用域不同,仅在本文件。
2017-12-15 15:37:54
956
原创 结构体sizeof不想字节对齐
问题描述:笔者在做一个项目:硬件要访问内存中按照Spec格式定义的一段数据包。在C语言中一般使用结构体初始化这个数据包,因为可以方便配置各个字段。但结构体默认需要字节对齐的(sizeof和实际大小不同),因此和内存真实的存放方式可能不同。解决方法:让结构体按1字节对齐,例如: struct test{ char ch; int size; char str[10]
2017-12-13 09:40:59
852
原创 Verilog变量位宽定义的两种方式及差别和可能引起的错误
Verilog数据位宽的定义 方式一: Verilog的位宽定义一般如下所示: 如:reg [7:0] in,代表定义一个8位长度的变量in; 方式二: 在写代码的过程中不小心写成了reg [7] in(少写了“:0”),编译器没有报错。 差别:此时变成了长度为7的变量in。
2017-11-09 10:22:08
25587
原创 Ubuntu系统失败之----安装U盘不能存放其它文件
Ubuntu安装失败的经验贴 背景:笔者在数月之前制作了一个Ubuntu 14.4系统安装盘(当时把U盘格式化、制作了引导并且拷贝了镜像)。U盘的特点是除了系统相关文件之外没有其它任何文件。当时在三台联想笔记本上均成功安装。 问题:后来往U盘里面存了若干文件和文件夹。存了其它文件!!!今天安装时进度条一直不动,并且在大概五分钟后弹出错误信息:An attempt
2017-10-23 16:12:32
1332
原创 C语言中局部变量的地址覆盖问题
1.问题描述 在C语言的一个函数中定义了几个局部变量如A,B,C。当对其中一个变量A取地址并对该地址赋值时,如果赋值的地址大小超过A所占的空间大小,则其它的变量会被修改。2.调试过程 把被改变的变量的地址和A的地址打印出来,发现两者的地址差小于变量类型的地址。3.举例fun(){int a = 1, b = 2, c = 3;changeV
2017-10-19 15:37:58
1974
原创 C语言结构体内含有数组,该结构体作为参数传递时需用指针,否则对数组的修改不会被记录
在C语言编程时,常常会定义结构体,而且结构体里面常常会有数组,比如如下所示:typedef struct {int data[MAX_HEAP_SIZE];unsigned int heap_size;}HeapType; 这是一个堆的数据结构,包含堆的元素(数组)和堆的大小。在建大顶堆时会给建堆的函数传递参数,建堆函数如下:void Build_Max_He
2016-04-09 11:23:20
4900
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人