自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux动态链接懒加载

最近了解到一种技术——懒加载,这是一种与动态链接相关的技术,我对它有点感兴趣,于是决定深入了解一番。懒加载是一种延迟加载资源的策略,它将资源的加载推迟到在首次访问或需要时才执行。这意味着在应用程序启动时,并不会立即加载和链接所有可能需要的库或模块,而是等到应用程序执行到实际需要使用它们的代码路径时才加载和链接。这可以减少启动时间和内存占用,因为应用程序只加载了实际需要的部分。比如,以下面的程序为例。当程序刚运行到main函数时,got中还没有printf函数的地址。

2023-09-10 16:58:58 414

原创 从零编写linux0.11 - 第十一章 可执行文件

加载 elf 格式可执行文件,不支持过大的文件,不支持动态编译。

2023-02-18 01:51:07 1162 1

原创 从零编写linux0.11 - 第十章 文件系统(二)

完善文件系统,提供文件的增删改等功能。能够更改文件以及创建删除文件和文件夹。

2023-02-02 22:41:15 350

原创 从零编写linux0.11 - 第九章 文件系统(一)

简单地实现了 open,read,write,close等函数。

2023-01-28 20:27:47 917

原创 从零编写linux0.11 - 第八章 软盘操作

介绍在linux0.11中,如何初始化DMA,读写软盘扇区,对软盘出错的处理等操作。

2022-08-15 11:06:51 779

原创 从零编写linux0.11 - 第七章 完善终端

编程环境:Ubuntu Kylin 16.04、gcc-7.3.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标本章将会完善终端,实现输入功能,完善输出功能。知识点涉及到键盘和终端控制。1.数据结构介绍之前我们在用 printk 函数打印字符串时,printk 函数调用 tty_write,tty_write 调用 con_write 都是直接对字符串进行操作的。这种方式并没有什

2022-05-30 14:01:41 557

原创 从零编写linux0.11 - 第六章 任务管理

编程环境:Ubuntu Kylin 16.04、gcc-5.4.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标本章的目的是要创建任务,并调度到新任务中。这其中涉及到任务结构体的讲解,进程调度,内存分配,系统调用等一系列知识,是目前内容最为充实,最为丰富的一章。相信大家都会沉浸其中,无法自拔(手动滑稽)。1.第一个任务相信大家都学过操作系统的知识,对于任务的相关知识就不多说了,毕

2022-04-12 18:02:41 875

原创 从零编写linux0.11 - 第五章 中断与异常

编程环境:Ubuntu Kylin 16.04、gcc-5.4.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标本章会编写部分异常的处理函数以及初始化PIC(可编程中断控制器)。下图是中断异常向量分配表,本章会编写0-6、8-13、15、17-20号异常处理函数,根据有无错误代码,将异常分为两类,我们会先编写无错误代码的异常处理函数,再编写有错误代码的异常处理函数。7和16号异常向量

2022-04-03 20:00:34 1160

原创 从零编写linux0.11 - 第四章 部分系统初始化

编程环境:Ubuntu Kylin 16.04、gcc-5.4.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标完成系统的部分初始化操作:内存管理的初始化、缓冲管理初始化、时钟初始化和协处理器的检查。为以后管理系统资源做准备。1.内存管理的初始化在head.s中我们已经设置了页目录和页表,现在要对内存的使用做出进一步的规定。对于linux0.11内核,它默认最多支持16M物理内

2022-04-01 22:03:18 1114

原创 从零编写linux0.11 - 第三章 printk函数

编程环境:Ubuntu Kylin 16.04、gcc-5.4.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标编写printk函数,实现它的功能。printk函数的功能与printf相同,区别在于printk在内核态被使用,printf在用户态被使用。首先printk要把格式化字符串转换成普通字符串,如"%s"转换成它指向的字符串,把"%d"转换成数字字符串等等。接着要把字符串显

2022-03-31 11:36:13 1809

原创 从零编写linux0.11 - 第二章 内核初始化

编程环境:Ubuntu Kylin 16.04代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)1.添加内核进入内核后也不是马上进入main函数,上一章只是暂时设置gdt,此外还要设置idt和其他的一些初始化操作,这些内容也要使用汇编进行编写,此处采用AT&T格式的汇编。以下为head.s的内容,为了简单起见,内容还是一个死循环。.globl startup_32startup_3

2022-03-03 22:06:41 957

原创 从零编写linux0.11 第一章 简单的bootloader

编程环境:Ubuntu Kylin 16.04代码仓库:https://gitee.com/AprilSloan/linux0.11-project工程结构:每一个目录对应于一章的内容,如chapter_01对应于第一章。每一章包含多个小节,如chapter_01/1st代表第一章第一节(简单的启动盘),所有的shell命令都默认当前目录为小节的目录。linux0.11源码下载(不能直接编译,需进行修改)原本linux0.11是用gas汇编编写bootloader,我认为大家对gas汇编不太熟悉,所

2022-02-24 15:48:13 1450

原创 从零编写linux0.11 - 序

序最初接触到自制操作系统的书是《30天自作操作系统》,因为这本书,我对如何制作操作系统有了基本的了解。 但这本书有些本末倒置了,重点的内存管理、进程管理、文件系统等方面介绍得太少,反而把大篇幅花在了gui和shell上。我看的第二本自制操作系统的书是《一个64位操作系统的设计与实现》,64位操作系统在不少地方与32位操作系统不同,比如进程切换的方式,不过在用C语言编程时对此没有多大感触 。这个操作系统的代码不够精简,不宜阅读,我并没有读完这本书。后来想看看实际的操作系统源代码,首选的肯定是lin

2022-02-24 15:10:05 459 1

原创 Linux下bochs的安装与使用

简单介绍了bochs的安装与使用,在使用方面简单写了一个启动盘用作测试。

2022-01-18 22:32:47 7391 2

原创 《30天自制操作系统》第9天

第九天 内存管理1.整理源文件这一节只是进行了代码整理,把鼠标键盘相关的内容转移到了特定的文件里。2.内存容量检查(1)要做内存管理,首先得知道内存的容量,怎么知道内存的容量呢?BIOS可以告诉我们答案。但使用BIOS稍微有点麻烦,于是,作者决定自己写程序检查内存容量。内存检查程序主要有以下几步: 检查CPU是386芯片还是486芯片。若为486芯片,则禁止cache。(386没有cache) 不断向内存写入然后读取数据。如果写入和读取的内容一样,则内存连接正常。 怎

2021-09-05 23:02:44 3129 12

原创 《30天自制操作系统》第8天

第八天 鼠标控制与32位模式切换1.鼠标解读(1)首先要说明一下,鼠标发送回来的数据是三个字节一组的,所以我们要以三个字节为单位处理鼠标数据。 unsigned char mouse_dbuf[3], mouse_phase; enable_mouse(); mouse_phase = 0;while (1) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&

2020-09-21 23:27:20 407 3

原创 《30天自制操作系统》第7天

第7天 FIFO与鼠标控制温馨提示:这章的程序我在作者提供的模拟器上运行的效果不理想,而在虚拟机上没有问题,所以我建议大家使用虚拟机运行这章的程序。(如果在模拟器上运行起来没问题就不用管这条提示了)1.获取按键编码继续对键盘进行操作,这次是要获取所按键的编码。#define PORT_KEYDAT 0x0060void inthandler21(int *esp){ struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTIN

2020-09-12 13:30:36 330

原创 《30天自制操作系统》第6天

第6天 分割编译与中断处理1.分割源文件由于bootpack.c代码行数太多,不便于观看也不便于修改,于是根数函数的功能将它分割为几个文件,下图为示意图。还需要修改一下Makefile,流程如下:由于只是简单把代码转移一下位置,就不展示完成后的界面了。2.整理Makefile现在Makefile又太长了,对他进行修改。%.gas: %.c $(CC1) -o $*.gas $*.c%.nas: %.gas $(GAS2NASK) $*.gas $*.nas%

2020-08-30 13:46:17 469

原创 《30天自制操作系统》第5天

第5天 结构体、文字显示与GDT/IDT初始化1.接收启动信息我们在asmhead.nas中保存了一些数值,比如SCRNX、SCRNY,但是不取出来使用的话就没有意义了,就让我们来读取这些数据吧。 char *vram; int xsize, ysize; short *binfo_scrnx, *binfo_scrny; int *binfo_vram; init_palette(); binfo_scrnx = (short *) 0x0ff4; binfo_scrny =

2020-08-24 22:02:29 423

原创 《30天自制操作系统》第4天

第4天 C语言与画面显示的练习1.用C语言实现内存写入现在想要在屏幕上显示点什么东西,需要向VRAM中数据,虽然C语言可以写内存,但我们还是先用汇编来完成这个工作吧。现在在naskfunc.c中添加点东西。_write_mem8: ; void write_mem8(int addr, int data); MOV ECX, [ESP + 4] ; [ESP + 4]中存放的是地址,蒋其读入ECX MOV AL, [ESP + 8] ; [ESP +

2020-08-14 22:53:17 274

原创 《30天自制操作系统》第3天

第3天 导入32位模式并导入C语言温馨提示:这一天的学习里面有一个大坑,如果学不会也请放平心态继续学下去,以后的内容于此并没有多大关系。1.制作真正的IPL

2020-08-11 13:41:19 594

原创 《30天自制操作系统》第2天

第2天 汇编语言学习与Makefile入门温馨提示:建议大家使用VS Code编写程序,VS Code的代码提示功能非常好用,能够容错提示,另外还要安装ASM Code Lens扩展,此扩展可以实现汇编代码的高亮。1.继续开发再次对helloos.nas中的内容进行修改扩充,代码如下所示:; hello-os; TAB = 4 ORG 0x7c00 ; 指明程序的装载地址; 以下的技术用于标准FAT12格式的软盘 JMP entry DB 0x90 DB

2020-08-01 19:51:12 597

原创 《30天自制操作系统》第1天

如果没有《30天自制操作系统》的光盘资源的话,可以到这个网址http://aprilsloan.ys168.com/下载,资源在“文件”文件夹下。首先打开二进制编辑器(我的光盘资源中有此软件),在软件中输入如下字符:从0000:0090开始后面全都是00,一直输入到最后0016:8000。...

2020-08-01 09:47:25 540

原创 《30天自制操作系统》第0天

曾经,我花了一个多月时间学习《30天自制操作系统》这本书,学到了第20几天的时候放弃了,主要是因为越学到后面我发现代码就越看不懂,完全成了代码的搬运机,当时的我忙着实习就没有再学了。而现在我重新开始学习这本书,已经学了一个星期,果然有不少收获,也明白了为什么之前会越来越看不懂代码,原因便是太急躁了。虽说这本书命名为《30天自制操作系统》,但里面的知识花30天学完是十分困难的。作者也在书中说明,30天是根据作者已有的能力进行划分的,有些地方学习一章可能要花上一周。之前,我都是一天刷一章,刷到第10章之后,

2020-07-31 19:43:23 373

原创 Python实现json字幕转换为srt字幕

在B站下载了一个英文视频,点开来看,发现没有字幕,又在B站上下了字幕,是json格式的,但我的PotPlayer不支持json格式的字幕,顿时感觉被坑了,上网搜了搜json字幕转换其他字幕格式的工具,结果并没有这种东西,倒是找到了一篇srt字幕转json字幕的博客,反正闲着没事,我就参照着这篇博客用python写了个将json字幕转换为srt字幕的脚本。先看看srt字幕的格式:首先第一......

2020-02-13 13:42:17 12836 22

原创 Python编程从入门到实践文件资料

《Python编程:从入门到实践》是我学习Python的启蒙书,但可惜的是我阅读的是电子文档,并没有光盘资料,所以在学习第十六章 可视化数据时找不到要用的文档,在百度上搜索到的,大多需要一些下载币之类的。但最终然我在github上找到了这本书的所有资料,链接:https://github.com/ehmatthes/pcc,在Download Source Code处,点击Download ZIP...

2018-11-19 23:07:48 4653 24

原创 移植keil工程到EmBitz工程

前几天看到别人推荐一款比keil更好用的ARM开发IDE,博主便安装了试试,使用之下,Embitz在提示和语法高亮等方面确实要甩keil几条街,但是,在某些方面keil也要比Embitz要好。首先移植一个跑马灯例程让大家看看其中的区别。先用EmBitz新建一个工程,关于怎么新建工程请大家自行百度,博主就不赘述了。新建好后,如图所示:作为一个正点原子的忠实用户,看到这些文件夹的名字总觉得不舒服,那就...

2018-06-11 10:52:26 1475 1

BIOS接口技术参考手册

BIOS接口技术参考手册

2022-01-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除