- 博客(260)
- 资源 (24)
- 问答 (1)
- 收藏
- 关注

原创 linux文件系统相关文章汇总
vfs层教程中需要知道的所有知识:为pc编译配置安装当前最新的内核使用qemu调试arm、x86平台linux内核手把手教你改内核源码–sysfs虚拟文件系统1手把手教你改内核源码–sysfs虚拟文件系统2具体文件系统:minix v1文件系统结构mkfs.minix.c代码解析...
2021-10-09 11:45:14
239
2

原创 请亲们关注下我,谢谢了。
请亲们关注下我,谢谢了。由于博客专家认证需要粉丝超过500个人。所以我把很多文章设置成了粉丝可见,为了涨粉,请大家见谅。
2021-10-05 22:23:13
173

原创 所有文章汇总目录
所有文章汇总目录其他工具的使用:1.linux下怎样用ctags查看内核源码2.UNIX环境高级编程——学习路线图3.CentOS如何配置国内YUM源4.发现一份Vim 配置文件,自己感觉特别好的。5.处理程序时开启多少并发线程最合适?6.查看进程执行情况的几种方法7.cmake配置文件一些常用的配置基础知识:0.linux基本操作1.linux高级编程二基础知识2.linux高级编程三网络以及网络配置3.linux高级编程四shell编程/指针4.linux高级编程五结构体5
2021-10-04 22:26:29
560

原创 给计算机专业的同学一些职业规划建议
今天给本科大学生一些职业规划建议之前,我给大家推荐一篇文章,好像叫做 计算机专业的学生应该有更大的目标。这个文章链接我找不到了,找到了我就会放在这里。首先,作为一个计算机相关专业的大学生,都会围绕编程语言去讨论哪个他们的优略,所以,我们就从编程语言来分一个职业方向。1.java2.javascript3.Python4.Ruby5.PHP6.C7.C++8.C#9.Go10.TypeScript11.Objective- C12.VB(提早别学,浪费时间,我也就不介绍了)1.j
2021-10-04 22:00:49
353
原创 unity3d著名项目-Dark Tree翻译
Dark Tree组件概述•性格和生活统计•武器•控制器动画•库存和物品•建筑系统•教程和帮助感谢您购买DTFPS。此游戏模板允许您轻松制作生存游戏原型。在本手册中,我想对项目中使用的工具和方法以及一些入门教程该资产的主要目标是提供简单的设置体验和使射击游戏快速的能力但请记住,您的游戏需要的工作远不止资产商店中的现成模板。 它会 不是自己为您制作游戏,而是会给您一个很好的起点。 有时你仍然需要工作 如果您想扩展包并使您的游戏真正独特和原创,请使用代码。 如果你熟悉 C# 并且可以编写
2022-08-07 18:18:26
1713
原创 linux的initcall机制--应用层用链接脚本实现
initcall机制的由来我们都知道,linux对驱动程序提供静态编译进内核和动态加载两种方式,当我们试图将一个驱动程序编译进内核时,开发者通常提供一个xxx_init()函数接口以启动这个驱动程序同时提供某些服务。那么,根据常识来说,这个xxx_init()函数肯定是要在系统启动的某个时候被调用,才能启动这个驱动程序。最简单直观地做法就是:开发者试图添加一个驱动程序时,在内核启动init程序的某个地方直接添加调用自己驱动程序的xxx_init()函数,在内核启动时自然会调用到这个程序。但是,回头一
2022-03-04 17:21:45
390
原创 制作一个启动软盘并用bochs模拟器启动
1.bximage创建软盘。选1默认[1.44M]起名boot.imgstatus=inserted表示已经插入该软盘2.编译boot.asm汇编编写的引导程序。使用nasm编译器进行编译。-o 参数: nasm 文件名 -o 目标程序名-o 和gcc一样表示输出文件。编译命令:nasm boot.asm -o boot.bin3.使用dd命令把引导程序强制写入到虚拟软盘的固定扇区内。dd if=boot.bin of=./boot.img bs=512 count=1 conv=
2021-11-25 15:47:17
1776
原创 内核映像文件格式
1.vmlinuxvmlinux是一个包含linux kernel的静态链接的可执行文件,文件类型是linux接受的可执行文件格式之一(ELF、COFF或a.out)。2.vmlinuzvmlinuz是可引导的,压缩的linux内核,“vm”代表的“virtual memory”。vmlinuz是vmlinux经过gzip和objcopy(*)制作出来的压缩文件。vmlinuz不仅是一个压缩文件,而且在文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlin
2021-11-25 15:45:13
581
原创 计算机是如何启动的?
从打开电源到开始操作,计算机的启动是一个非常复杂的过程。0、boot的含义先问一个问题,"启动"用英语怎么说?回答是boot。可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:拽着鞋带把自己拉起来必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做"拉鞋带",久而久之就简称为boot了。计算机的整个启动过程分成四个阶段。一、第一阶段:BIOS上个世纪70年代初,“只读内存
2021-11-25 15:44:30
158
原创 内核中高级语法和特殊数据结构
内核中高级语法和特殊数据结构attributeGNU C 的一大特色就是__attribute__ 机制。attribute 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。#书写特征是:前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数。 __attribute__ #语法格式为: __attribute__ ((attribut
2021-11-25 15:42:55
538
原创 内核性能分析总结
1.unixbencha.测试介绍UnixBench源于1995 年,基线系统是“George”,一个工作站:SPARCstation 20‐61,128MB RAM,Solaris2.3,此系统的指数值被设定为10,所以,如果一个系统的最后结果分数为520,意思是指此系统比基线系统运行快52 倍。UnixBench也支持多CPU系统的测试,默认的行为是测试两次,第一次是一个进程的测试,第二次是N份测试,N等于CPU个数。这样的设计是为了以下目标:测试系统的单任务性能测试系统的多任务性能测试系统
2021-11-25 15:42:06
282
原创 qemu和主机共享磁盘
有时候需要在宿主机和qemu虚拟机之间共享文件,添加一个共享磁盘将有助于该项工作。创建64MB磁盘镜像文件,并格式化为ext4,作为共享磁盘备用。dd if=/dev/zero of=ext4.img bs=512 count=131072mkfs.ext4 ext4.img修改qemu启动命令,使用-hdb增加一个磁盘。qemu-system-x86_64 -kernel ~/linux-4.14.191/arch/x86_64/boot/bzImage -hda ~/busybox-1.
2021-11-25 15:40:51
3445
2
原创 mkfs.minix.c之minix_super_block.s_nzones获取解析
先看结构体:struct minix_super_block { uint16_t s_ninodes; //i节点数 uint16_t s_nzones; //区块数 uint16_t s_imap_blocks; //i节点位图所占块数 uint16_t s_zmap_blocks; //区块位图所占块数 uint16_t s_firstdatazone; //数据区中第一个逻辑块块号 uint16_t s_log_zone_size; //磁盘块数/区块数 uint32_t
2021-10-19 11:17:12
219
原创 mkfs.minix.c之minix_super_block.s_ninodes获取解析
struct minix_super_block { uint16_t s_ninodes; //i节点数 uint16_t s_nzones; //区块数 uint16_t s_imap_blocks; //i节点位图所占块数 uint16_t s_zmap_blocks; //区块位图所占块数 uint16_t s_firstdatazone; //数据区中第一个逻辑块块号 uint16_t s_log_zone_size; //磁盘块数/区块数 uint32_t s_max_
2021-10-18 21:22:09
213
原创 util-linux中的setbit函数解析
先看如下代码:如果分析代码时嫌麻烦。可以直接运行调试,查看结果是否符合预期结果。如果符合预期结果,就没有必要查看过程。从函数名猜测该宏定义为给某个比特位置位。然后调试, 编写测试代码,将2位置位。调试时查看值是否正确。如下,给第二位置位时,二进制表示为:100, 转换成10机制为4.猜想正确。/** * setbit宏定义解析实验*/static char *inode_map;#define CHAR_BIT __CHAR_BIT__ //获得一个字符对象的比特的
2021-10-18 16:53:43
452
原创 手把手教你改内核源码--sysfs虚拟文件系统2
环境:uos内核代码版本:4.19.90首先,上篇文章中在/sys/中创建了自定义的文件夹和文件。那么,提出一个问题:为啥使用kobject_create_and_add()内核接口创建节点的时候默认在 /sys/ 文件夹下了?带着问题去从start_kernel开始找答案。这是我自己找的调用过程。最后一个函数sysfs_create_dir_ns()创建文件夹,已经被我改了。改的那一部分就是答案。先看代码:/** * 找到接口为NULL时,为啥默认是在/sys 目录下了 */
2021-10-09 11:36:39
453
原创 最简单的字符设备驱动
1.需要先创建设备节点mknod /dev/xxx c 111 0创建一个名字为xxx的字符设备, c表示字符设备, 主设备号是111, 此设备号是0。2. 驱动程序#include <linux/fs.h>#include <linux/init.h>#include <linux/module.h>static int first_drv_open(struct inode *inodep, struct file *filep){ pr
2021-10-05 22:56:02
251
原创 KDE框架介绍
KDE框架介绍KDE是目前最好看的桌面框架https://api.kde.org/frameworks-api/frameworks-apidocs/frameworks/index.htmlKDE 框架建立在 Qt 框架上,提供从简单实用程序类(例如 KCoreAddons 中的类)到针对桌面应用程序的常见需求(例如 KNewStuff)的集成解决方案,以在应用程序中获取可下载的附加内容,或者提供强大的功能 KIO 多协议文件访问框架)。KDE 框架可用于基于 CMake 和基于 QMake 的项
2021-10-05 22:49:00
1521
原创 内核性能分析总结
# 内核性能分析总结1.unixbencha.测试介绍UnixBench源于1995 年,基线系统是“George”,一个工作站:SPARCstation 20‐61,128MB RAM,Solaris2.3,此系统的指数值被设定为10,所以,如果一个系统的最后结果分数为520,意思是指此系统比基线系统运行快52 倍。UnixBench也支持多CPU系统的测试,默认的行为是测试两次,第一次是一个进程的测试,第二次是N份测试,N等于CPU个数。这样的设计是为了以下目标:测试系统的单任务性能测试系统
2021-10-05 22:45:51
317
原创 mkfs.minix.c代码解析
int main(int argc, char ** argv){ struct fs_control ctl = { .fs_namelen = 30, /* keep in sync with DEFAULT_FS_VERSION */ 0 }; int i; struct stat statbuf; char * listfile = NULL; enum { OPT_LOCK = CHAR_MAX + 1 }; static const struct option lo
2021-10-01 13:11:38
431
原创 centos下rpm包
参考博客:https://www.cnblogs.com/michael-xiang/p/10480809.htmlhttps://www.cnblogs.com/SQL888/p/5776442.html一、rpm包制作1.安装打包工具yum install -y rpm-buildyum install redhat-rpm-config2.打包文件的配置安装完成后会在root目录下生成BUILD BUILDROOT RPMS SOURCES SPECS SRPMS五个文件夹,都是空的
2021-09-15 15:26:33
759
原创 使用qemu调试arm、x86平台linux内核
1.ARMsudo apt-get install qemu libncurses5-dev gcc-arm-linux-gnueabi buildessent 安装编译需要的工具包。下载linux源码,和下载busybox工具包:https://busybox.net/downloads/busybox-1.24.0.tar.bz2利用busybox编译最小文件系统: cd busybox export ARCH=arm export CROSS_COMPILE=
2021-07-28 10:05:05
1404
原创 qemu基础知识、编译、安装以及虚拟机创建
0.qemu和kvm的区别 首先KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器)。 在支持VMX(Virtual Machine Extension)功能的x86处理器中,Linux在原有的用户模式和内核模式中新增加了客户模式,并且客户模式也拥有自己的内核模式和用户模式,虚拟机就是运行在客户模式中。 KVM模块的职责就是打开并初始化VMX功能,提供相应的接口以支持虚拟机的运行。 QEMU(
2021-07-28 09:42:40
5151
原创 STM32中使能时钟的目的
首先强调:时钟使能必须在外设初始化之前!!!!!!!在这引用一个解释,“ARM的芯片,外设通常都是给了时钟后才能设置它的寄存器(即才能使用这个外设)。STM32、LPC1XXX等等都是这样,这么做的目的是为了省电,使用了所谓时钟门控的技术。寄存器是基于什么的?当然是触发器!!!准确地说应该是D触发器触发器的赋值是一定需要时钟的, 而寄存器的时钟是由总线时钟提供的,就是说没有总线时钟的话,你给寄存器值它是不会读入的。换句话说,只有送来了时钟,触发器才能被改写值,这样寄存器才会工作。又会有人说为什
2021-06-28 15:37:50
1784
2
原创 JZ2440裸机学习之从led学gpio
JZ2440学习之gpio第一步:开发环境配置先安装linux操作系统。在windows系统上安装linux子系统,或者在linux系统上安装windows虚拟机。(作者使用windowsOS,安装的ubuntu子系统,烧写工具用oflash工具)搭建交叉编译环境。 安装arm-linux-gcc, 或者其他的编译工具。连接Opne JTAG线到开发板和电脑。就可以进行裸机程序烧写。第二步:查看原理图查看原理图,看led接线原理。因为Led一端为3.3v高电平,所有要点亮Led需
2021-06-26 13:35:26
263
转载 图解 Linux 文件系统
之前我写过有关 Linux 文件系统源码分析的文章,但从源码角度分析文件系统略显枯燥(对新手不友好),所以这次主要通过图文的方式来讲解 Linux 文件系统的原理,而不用陷入源代码的深渊之中。一、硬盘简介在介绍文件系统前,我们先来了解一下 硬盘。众所周知,内存在断电后数据就会丢失,所以现代计算机都通过 硬盘 来进行数据存储。也就是说,硬盘中的数据在断电后依然能够保存下来。现在比较流行的硬盘分为:机械硬盘(HDD) 和 固态硬盘(SSD)。由于本文重点介绍的对象是 文件系统,所以对于硬盘的原理就不进行
2021-06-03 14:12:14
380
原创 arm体系结构与汇编指令
https://github.com/qwe624758472/Learning_set/blob/master/BookNote/ARM.md
2021-05-07 18:01:24
207
原创 x86汇编语言
第一章 基础知识Intel 8086 在实模式下可以访问 1MB 的内存空间,地址范围为 0x00000 到 0xFFFFF。出于各方面的考虑,计算机系统的设计者将这 1MB 的内存空间从物理上分为几个部分。8086 有 20 根地址线,但并非全都用来访问 DRAM,也就是内存条。事实上,这些地址线经过分配,大部分用于访问 DRAM,剩余的部分给了只读存储器 ROM 和外围的板卡.1.0x00000-0x9FFFF:DRAM(动态随机访问存储器):2.0xA0000-0xEFFFF: 分给外
2021-04-27 16:17:10
679
原创 30天自制操作系统:第六天:代码架构整理与中断处理
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器): 在设计上,cpu单独只能处理一个中断。 而pic是将8个中断信号集合成一个中断信号的装置。 只要有一个中断信息进来,就将唯一的输出管脚信号变成ON。后期扩充到了15个, 使用了主从PIC。8259a可编程中断控制器介绍:https://blog.youkuaiyun.com/navysniper/article/details/4380306初始化pic代码:void init
2021-04-07 11:41:55
265
2
原创 进程的表现形式
进程的表现形式1.进程生命周期运行:该进程此刻正在执行。等待:进程能够运行,但没有得到许可,因为CPU分配给另一个进程。调度器可以在下一次任务切换时选择该进程。睡眠:进程正在睡眠无法运行,因为它在等待一个外部事件。调度器无法在下一次任务切换时选择该进程。2.进程表示include/linux/sched.h中有结构体struct task_struct;表示了进程的所有信息。struct task_struct { volatile long state; /* -1表示不可运
2021-03-18 16:40:14
453
原创 Makefile详解
Makefile详解1.makefile的规则 target... : prerequisites ... command ... ...target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label:伪目标)prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令。(任意的Shell命令)1.target这一个或多个的
2021-03-03 14:15:40
1030
原创 Docker编译流程、代码框架分析、自定义docker功能
Docker编译流程与代码框架分析所有文章皆可以在以下链接中找到:https://github.com/qwe624758472/Learning_set/tree/master/BookNoteDocker整体编译打包教程环境搭建docker的编译,需要在宿主机预先安装docker软件。因为编译docker的源码时,会构建一个docker镜像并运行,在这个容器里面进行build操作。由于这个容器已经包含了go语言环境,故宿主机无须额外安装golang。宿主机系统:uos宿主机docker版本:
2021-01-12 10:33:47
632
原创 NAT详解与网络穿透原理分析
网络穿透原理1.什么是nat?NAT(Network Address Translation,网络地址转换),也叫做网络掩蔽或者IP掩蔽。NAT是一种网络地址翻译技术,主要是将内部的私有IP地址(private IP)转换成可以在公网使用的公网IP(public IP)。2.为什么会有nat?NAT的本质就是让一群机器公用同一个IP,这样就暂时解决了IP短缺的问题。NAT技术能够兴起的原因还是因为在我们国家公网IP地址太少了,不够用,所以才会采取这种地址转换的策略。3.实现方式及主要类型[外链图
2020-12-23 20:28:51
1773
1
原创 http简介并用go实现
1.HTTP协议简介超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。就是常用的浏览器和服务器通信协议. 将tcp进行封装后的一种应用层协议.2.HTTP工作原理HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状
2020-12-18 10:21:29
498
原创 Docker总结
Docker总结0.docker组件和历史[Docker 引擎]是用来运行和管理容器的核心软件。通常人们会简单地将其代指为 Docker 或 Docker 平台。如果你对 VMware 略知一二,那么可以将 Docker 引擎理解为 ESXi 的角色。基于开放容器计划(OCI)相关标准的要求,Docker 引擎采用了模块化的设计原则,其组件是可替换的。从多个角度来看,Docker 引擎就像汽车引擎——二者都是模块化的,并且由许多可交换的部件组成。汽车引擎由许多专用的部件协同工作,从而使汽车可以行
2020-11-05 10:44:26
287
原创 30天自制操作系统:第五天:文字显示与GDT/IDT初始化
第五天:文字显示与GDT/IDT初始化1.从内存中读出保存的值.昨天程序中300x200都是直接写入程序,本来应该从asmhead.nas先前保存的值中取,不然当画面模式改变时,系统就挂了.所以得修改bootpack.c文件代码从asmhead.nas写入的内存中取值.2.显示字符原理:将每一个bit当成一个黑点,那么,字符a就可以当成下图所示:那么字符a要显示赋值给显卡的话,用字符数组表示就变成:static char font_A[16]= {0x00,0x18, 0x18, 0x18
2020-10-30 16:36:23
452
树莓派下编译seafile文档
2018-05-14
IT职业发展路径
2018-04-28
安卓组建库
2016-01-18
set_bit函数的参数为BTN_0时是起到什么作用的,set_bit都有哪些参数,谢谢
2015-11-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人