- 博客(51)
- 收藏
- 关注
原创 STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(2)
实验 2:在单片机搭建好 tcp 服务器后,编写传送文件的上位机。
2024-08-22 18:15:11 324
原创 STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3)
实验 3:在搭建好 tcp 服务器,并拟定好协议的前提下,接收每一个 bin 文件的块,配置到 fpga。
2024-08-21 19:25:26 521
原创 HAL 库 STM32F4 裸机 LAN8720 实验
本次实验的 LAN8720 复位引脚直连了 MCU 的复位引脚,所以我没有手动添加引脚来复位,如果单独配置复位引脚,那么清参考别的教程配置。把 slipif.c 内容全部删除。
2024-08-15 11:21:37 566
原创 实验28.文件删除 sys_unlink
实验 28. 文件删除 sys_unlink1 删除目录项,2 释放 inode 的数据块和 inode 结构体。
2024-08-12 18:31:35 266
原创 实验27.fwrite,fread,fseek
实验 27. fwrite,fread,fseek1.确保 inode 的数据块有那么多空间,如果没有就扩容。2.把数据写入文件的数据块。读出 inode 的所有数据块偏移,然后在数据块中读出数据。修改 file 结构体的 fd_pos 即可。
2024-08-12 16:39:54 445
原创 实验25.创建文件
实验 25. 创建文件i_no 就是 inode 号i_sectors 是块地址数组,表示这个文件的内容是那些块构成的.如果是文件,那么块的内容是文件的内容如果是目录,那么这些块的内容是一个个目录项。
2024-08-09 00:08:38 509
原创 实验24.创建并挂载文件系统
实验 24. 创建并挂载文件系统创建件系统: 初始化每一个分区的结构,把扇区划分为超级块,扇区位图,inode 位图,inode 表,根目录,空闲扇区挂载分区: 创建一个分区结构体,在内存中存放要挂在的分区的超级块、扇区位图、inode 位图。
2024-08-06 21:17:24 431
原创 实验23.硬盘分区,并编写硬盘驱动程序
已完成实验已完成实验链接简介实验 22. 硬盘分区,并编写硬盘驱动程序总结创建硬盘并分区加载硬盘分区实现 printk使能硬盘中断 interrupt.cidel 线程,主线程阻塞后此线程保底 thread.csleep 函数 timer.c加载分区信息 ide.c创建硬盘fdisk /home/c/os/bochs/hd80M.img# 1.设置柱面和磁头mxmc162h16r# 创建主分区np1204833
2024-08-06 18:05:12 813
原创 实验22.堆内存管理
实验 22. 堆内存管理用户的内存块描述数组在 pcb 中定义了内存块描述数组,描述符的链表里放着申请了但是没有使用的内存块申请 size 大小的内存时,本质申请到的是 sizeof(arena) + size(假设叫 buffer) 的长度若 size>1024, 那么 arena 把 buffer 当成一个内存块,直接返回 buffer 的首地址若 size<1024,那么 arena 把 buffer 分成 n 份内存块,把每一个内存块记录在描述符的链表中。
2024-08-02 17:17:46 826
原创 实验21.实现 printf
实验 21. 实现 printf简化系统调用和中断,用 eax 代表调用号参数,ebx,ecx,edx 来代表参数(syscall.c kernel.s)添加 write 的系统调用接口(syscall.c, syscall-init.c, print.s)注意:要更改 print.s 中清屏的地址添加 printf 函数接口。
2024-08-01 18:13:26 554
原创 实验20.实现系统调用
实验 20. 实现系统调用进程结构体新增 pid 成员变量pid 采用静态全局变量,锁控制+1,确保唯一进程初始化是就分配好 pid添加 getpid,本质调用 syscall,参数入栈,再执行 int 0x80添加 0x80 中断,根据参数 0 调用系统调用函数表的函数初始化系统调用函数表,表项 0 就是获取 pid。
2024-08-01 11:42:06 434
原创 实验 19. 用户进程
实验 19. 用户进程main函数创造了1个主线程,两个内核线程,两个用户进程。共5个PCB,进程PCB->pgdir为进程自己的页表首虚拟地址,线程为null。因此本次实验是五个进/线程在来回切换。他们切换的方式无疑都是利用自己PCB->kstack保存切换前esp,然后不断pop完成cs:eip的跳转。
2024-07-31 22:26:09 378
原创 实验16.用锁实现终端输出
实验 15.用锁实现终端输出注意:gcc一定不能用11.4,换成书上环境,我是用的4.4.7能过正确。使用gcc11一直错误,怀疑人生了都。
2024-07-29 21:29:46 499
原创 实验6.分页
实验:构造页目录及页表,完成从虚拟地址3GB~3GB+1MB到实地址0 ~1MB的映射以及虚拟地址0 ~ 1MB向物理地址0 ~ 1MB的映射注意:此时loader.bin大小超过1024字节 所以mbr要读取3个扇区,dd要复制3个扇区。
2024-07-17 11:29:33 317
原创 vscode 打开远程bug vscode Failed to parse remote port from server output
原因如图:
2024-07-16 23:58:08 404
原创 实验5.内存容量检测
实验:利用BIOS中断获取物理内存容量注意:mbr不再跳转到loader的起始位置,而是loader的loader_start位置。
2024-07-16 17:45:40 348
原创 实验4.保护模式
实验:编写boot.inc和loader.s,完成在内存里写好3个段描述符(代码段、数据段、显存段)、赋值好GDTR寄存器、创建好表示3个选择子的字段后,进入保护模式
2024-07-16 14:59:13 1035
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人