- 博客(25)
- 资源 (1)
- 收藏
- 关注
原创 Linux 0.11中的页目录表及页表内容分析
根据head.s中第114行的.org 0x1000可知,物理地址0x1000之前的所有数据都将被页目录表覆盖(这个覆盖,是指更改了内存中的内核镜像文件,而不是磁盘上的内核镜像文件)。线性地址中间10位---------索引页表----------->得到页表中相应的项,其中的高20位就是物理地址的高20位。(1页页目录表+4页页表)线性地址高10位---------索引页目录表----------->找到相应页表。线性地址低12位-------------------->物理地址的低12位。
2024-05-12 17:24:42 734
转载 【操作系统】Linux开机加电到执行main函数之前的过程
首先,将页目录表和4个页表放在物理内存起始位置,此步骤覆盖了head程序自身内存空间(注意:这4个页表都是内核专属页表,将来每个用户进程都有他们的专属页表)。本节,操作系统执行的操作包括打开32位的寻址空间、打开保护模式、建立保护模式下的中断响应机制等与保护模式相关的工作、建立内存分页机制,最后最好调用main函数的准备。通过BIOS提供的int 0x13中断向量指向的中断服务程序,将软盘第二扇区开始的4个扇区(即setup.s对应程序)加载到内存中(SETUPSEG)。到此为止,内核已全部加载完成。
2024-04-14 18:45:17 33
转载 汇编中调用C中的函数,函数名前加下划线“_”
原文链接:https://blog.csdn.net/zhaolushandong/article/details/108565175。
2024-02-11 20:37:11 271
转载 Linux 0.11内核的启动过程
Linux 0.11内核的启动过程一、Image文件的构成1.1 Makefile中的相关命令Linux 0.11的主Makefile文件中,有如下字段:tools/build: tools/build.c$(CC) $(CFLAGS) \-o tools/build tools/build.c这个是对tools/build.c程序的编译。Image: boot/bootsect boot/setup tools/system tools/buildobjcopy -O binary -R .note
2024-01-01 15:24:39 143
转载 【嵌入式】stm32程序跳转实验
【嵌入式】stm32程序跳转实验菜老越于 2019-04-23 17:54:56 发布2888收藏 22分类专栏: 嵌入式 文章标签: keil stm32 程序跳转 IAP BootLoader版权嵌入式专栏收录该内容32 篇文章4 订阅订阅专栏近期想研究下stm32基于BootLoader的IAP功能,要想实现这个,必须先搞明白程序跳转,在真正开搞前折腾了一下午,完成了程序跳转的简单测试。共用了两个程序,一个放在0x8000000开始的位置,暂称为Load程序;另一个放在.
2022-04-03 22:39:56 1904
转载 STM32三种启动模式
所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。STM32上电或者复位后,代码区始终从0x00000000开始,三种启动模式其实就是将各自存储空间的地址映射到0x00000000中。(1)从Flash启动,将主Flash地址0x08000000映射到0x00000000,这样代码启动之后就相当于从0x08000000开始。(2)从RAM启动,将RAM地址0x200000
2022-01-23 14:12:52 5778
原创 TLB之flush操作[二]
【相关指令】在ARMv8-A中,TLB flush/invalidate(通常ARM/x86处理器手册中称为invalidate,linux系统中称为flush,以下的讨论统称为flush)的指令为:TLBI {IS} {, }其中,"level"为1到3,对应ARMv8的三个exception level,即EL1,EL2,EL3,通常EL1运行linux等操作系统,EL2在虚拟化模式下运行hypervisor。"type"相当于一个filter,指按照什么规则去选择被flush的item,包括V
2021-10-04 12:15:39 985
转载 AT24C16读写注意事项
本讲解不涉及详细IIC通信,重点在于AT24C系列器件的介绍 和 IIC的通信流程,不喜勿喷, 望请修正。。。。。GO图AT24C01/02/04/08/16的外形级封装和引脚说明AT24C系列为美国ATMEL公司推出的串行COMS型E2PROM,是典型的串行通信E2PROM 。AT24CXX是IIC总线串行器件,具有工作电源宽(1.8~6.0 V),抗干扰能力强(输入引脚内置施密特触发器滤波抑制噪声),功耗低(写状态时最大工作电流3 mA),高可靠性(写次数100万次,数据保存100年),支持在线编
2021-10-02 23:35:48 2454
原创 make menuconfig出现错误lexer.lex.c Error 127
编译Linux内核出现错误:make vexpress_defconfig & menuconfigwit@ubuntu:/home/linux-5.4.14# make vexpress_defconfigLEX scripts/kconfig/lexer.lex.c/bin/sh: 1: flex: not foundmake[1]: *** [scripts/Makefile.host:9: scripts/kconfig/lexer.lex.c] Error 127make
2021-09-29 11:09:25 2888 1
转载 Linux加载/usr/local/lib中的so库问题
Linux加载/usr/local/lib中的so库问题在Linux中运行qTox时,出现一些库加载不上(libavcode***,重新安装也不行),然后下载源码进行编译(https://my.oschina.net/u/2306127/blog/1616888),然后可以运行。说明是一些库的版本不兼容导致的。问题但是,编译qTox后,在当前目录使用./qtox可以运行,如果使用make install 后通过qtox命令则无法运行,提示libtoxcore库找不到,到/usr/local/lib中去
2021-06-13 19:37:55 5051
原创 ZeroMQ 在 centos下的安装
下载ZeroMQ :网址如下:https://github.com/zeromq/zeromq4-1/releaseszeromq-4.1.8.tar.gz复制到虚拟机解压tar zvxf zeromq-4.0.4.tar.gz安装步骤如下:$ ./configure$ make$ sudo make install
2021-06-13 12:50:50 526
转载 sigaction函数是用方法
一、函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);signum参数指出要捕获的信号类型,act参数指定新的信号处理方式,oldact参数输出先前信号的处理方式(如果不为NULL的话)。二、 struct sigaction结构体介绍struct sigaction {void (*sa_ha
2021-06-05 19:19:01 397
转载 linux内核升级X86
一、Linux内核概览Linux是一个一体化内核(monolithic kernel)系统。设备驱动程序可以完全访问硬件。Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置,并在系统运行期间可直接装载或卸载。1. linux内核linux操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有
2021-05-04 17:41:01 349
原创 虚拟机内核编译提示内存不足解决办法
. 先关闭虚拟机,扩展硬盘50G以上**2. 开启虚拟机,进入root3. 执行fdisk –l,查看磁盘信息。当看到第一行Disk /dev/sda: 与实际df -h显示内容不符时,说明增加磁盘成功了4.使用fdisk /dev/sda, 创建新分区依次执行 m回车 n 回车 p回车 4 回车 回车 回车 t 回 4 回 8e回 p 回 w回5. reboot重启6. pvcreate /dev/sda47. 查看新建的物理卷和大小,使用pvdisplay命令8. vgexten
2021-05-04 12:23:59 1650 1
转载 /dev/sda1挂载
/dev/sda这是Linux系统下的设备文件,类似Windows系统上面的本地磁盘、U盘、光驱等设备。Linux系统访问设备文件需要mount命令挂载映射成文件,查看:1、建一个目录(挂载磁盘分区) 1 2 mkdir/mnt/sda1 #通过mkdir命令创建文件夹 2、挂载/dev/sda1分区 1 2 mount/dev/sda1/mnt/sda1 #挂载/dev/sda1到/...
2021-05-04 10:26:20 9465
转载 arm编译环境搭建详解
androidstar_cn2016-11-14 22:40:12504收藏1分类专栏:linux文章标签:arm-linux-gcc下载arm编译环境搭建qt编译环境1.Qt Embedded porting on ARM platform2.arm-linux-gcc下载3.arm-linux-gcc tar 打包含 usr/local/arm/4.4.3 目录,建议最好到根目录 / 下解压 arm-linux-gcc,可以省去移动文件的步骤。[ro...
2021-05-03 20:21:30 686
原创 /mnt/hgfs/下不显示共享文件夹的处理办法
root用户下执行: vmhgfs-fuse .host:/ /mnt/hgfs/[hlf@localhost /]$ cd mnt/ [hlf@localhost mnt]$ ls hgfs [hlf@localhost mnt]$ cd hgfs/ [hlf@localhost hgfs]$ ls [hlf@localhost hgfs]$ vmhgfs-fuse .host:/ /mnt/hgfs/ fusermount: user has no writ...
2021-05-03 15:01:57 1254 1
原创 operator+单参数和双参数的两种写法,双参数不用声明全局函数
purple_wind_yy 2017-07-27 09:05:54 8719 收藏 11分类专栏: C++版权C++运算符重载在自定义类中经常会用到,比如当我们自定义一个点类Point,想对Point类对象进行加减比较判断等操作时,就需要对相应运算符进行重载。以operator+为例,通常直观的感觉操作数就是应该有两个,写法如下: Point operator+(const Point &p1,const Point &p2)const;//(会报错)...
2021-04-12 16:04:21 1871
原创 创建qt DLL文件,并在代码中调用
先创建一个共享库工程:这个网上很多,我们简单写一个:在.h文件里面声明2个函数:#ifndef CODEDOUBLE_H#define CODEDOUBLE_H#include "codedouble_global.h"#include "string.h"class CODEDOUBLESHARED_EXPORT Codedouble{public: Codedouble();virtual int...
2021-04-11 10:27:30 125
原创 将double类型转化为内存字节流存放,以及将内存流转化为double类型
向对端传输double类型数据时,会用到解码,这里是转化double类型数据的代码:double a =3.14 ;QFile myfile("C:\\test.txt");myfile.open(QIODevice::Append);QTextStream mystream(&myfile);mystream.setCodec("utf-8");mystream << " original: " << a <<endl;
2021-04-04 14:51:23 563
原创 打印所有素数C语言
int a; int n; bool isprime; printf("please enter the number of you want:"); scanf("%d", &a); for (;a>1; a--) { isprime = true; for (n = 2; n < a/2+1; n++) { if (a%n == 0) ...
2021-02-09 21:02:04 371
原创 使用setStyleSheet设置Labe的背景图片无法显示的问题
今天碰到一个网友的代码问题if(ui->btnPowerOn->isChecked()){ui->label->setStyleSheet(“QLable{border-image:url(:/background-image/kai.png)}”);ui->btnPowerOff->setChecked(false);}label无法显示图片经翻阅资料发现QPushButton是这样的用法 如下:ui->pushButton->setStyl
2021-02-08 19:13:20 1068
原创 visualstudio2015,新建项目后发现无法打开包括文件stdio.h问题解决
刚刚下载了visualstudio2015,新建项目后发现无法打开包括文件stdio.h,经过网络搜索发现解决过程如在打开的选项卡中选择vc++目录–>包含目录下拉条点击编辑添加如下目录:C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.10150.0\ucrt然后分别在库目录和运行库目录添加lib文件的路径:C:\Program Files %28x86%29\Windows Kits\10\Lib\10.0.10150.0\
2021-02-06 17:47:35 2538 1
原创 (*ptr)[10]如何 指向一维数组
(*ptr)[10]如何 指向一维数组#include “stdio.h”void main(){int array[10]={1,2,3,4,9};int (ptr)[10];int i;ptr=&array;for(i=0;i<5;i++)printf("%d",(*ptr+i));}这里有一段英文来详细解释int *pttrs[10] = an array consists of 10 pointers, any one of which points to
2021-02-06 15:51:44 418
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人