![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux0.11内核源码
文章平均质量分 78
天才小C
从事服务器、交换机行业
展开
-
linux更新内核
官网链接:https://kernel.org内核下载库:https://mirrors.edge.kernel.org/pub/linux/kernel/root@cary:~# apt-get updateroot@cary:~# sudo apt-get install libncurses5-dev build-essential kernel-package flex bison libelf-dev libssl-dev编译的过程中肯能会报错,根据实际报错解决就好,google搜索原创 2024-01-22 09:35:24 · 1143 阅读 · 1 评论 -
Linux0.11内核源码解析-string待更新
sting.h头文件包含了所有的字符串操作函数。原创 2023-12-12 15:36:41 · 412 阅读 · 0 评论 -
Linux0.11内核源码解析-printk
处理包括:将回车符'\r'转换为换行符'\n'(如果配置允许),将换行符'\n'转换为回车符'\r'(如果配置允许),将换行符'\n'转换为回车符'\r'并插入队列中(如果配置允许),将字符转换为大写(如果配置允许)。首先将fs寄存器和ds寄存器的值压入栈中,然后将fs寄存器的值设置为ds寄存器的值,这是为了在访问buf时使用fs寄存器,因为fs寄存器通常用于指向当前进程的TSS(任务状态段),而TSS中包含了当前进程的内核栈。最后,将栈中的值弹出,恢复fs寄存器和ds寄存器的值,返回打印的字符数i。原创 2023-12-12 17:20:19 · 1281 阅读 · 0 评论 -
Linux0.11内核源码解析-malloc
Linux内核版本0.11中的`malloc.c`文件实现了内存分配的功能。在这个版本的Linux内核中,`malloc.c`文件包含了内核级别的内存分配函数,用于分配和释放内核中的内存。这些函数可以帮助内核管理可用的内存,并允许内核动态地分配和释放内存,以便在运行时满足不同模块或进程的内存需求。基本上,它实现了类似C标准库中的`malloc()`和`free()`函数的功能,但是是针对内核级别的操作而设计的。原创 2023-11-01 19:43:45 · 438 阅读 · 0 评论 -
Linux0.11内核源码解析-exec.c
开始,则分析shell程序名和其参数;3.对当前调用进程进行运行新文件前初始化操作,指向新执行文件的i节点,复位信号处理句柄,根据头结构信息设置局部描述符地址和段长;create_tables函数用于根据给定的当前堆栈指针值p以及参数个数argc和环境变量个数envc,在新的程序堆栈中创建环境和参数变量指针表,并返回此时的堆栈指针值sp。1.执行对参数和环境参数空间页面的初始化操作,初始化空间页面指针数组,根据执行文件名取执行对象的i节点,计算参数个数和环境变量个数,检查文件类型、执行权限。原创 2023-10-31 20:10:35 · 630 阅读 · 0 评论 -
Linux0.11内核源码解析-truncate.c
truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块,包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0,并释放占用的设备空间。原创 2023-08-17 10:37:31 · 754 阅读 · 1 评论 -
Linux0.11内核源码解析-fcntl.c/iotcl.c/stat.c
dup返回当前值最小的未用句柄,dup2返回指定新句柄的数值,句柄的复制操作主要用在文件的标准输入、输出重定向和管道方面。fcntl.c实现了文件控制系统调用fcntl和两个文件句柄描述符的复制系统调用dup()和dup2()。复制文件句柄,参数fd是要复制的文件句柄,arg是新文件句柄的最小数值,返回值是新文件句柄或者错误码。系统调用用于对打开文件描述符进行操作和控制,通过传递不同的命令()是否有效,即必须小于已打开文件描述符的最大数目(),并且与当前进程的文件描述符表中的相应条目()来实现不同的操作。原创 2023-08-08 14:42:05 · 378 阅读 · 0 评论 -
Linux0.11内核源码解析-buffer.c
高速缓冲区在整个五路内存中所处的位置缓冲区划分,分为缓冲区头和缓冲区块缓冲区双向链表结构内核访问流程hash函数(设备号^逻辑块号)Mod 307。原创 2023-07-21 11:50:05 · 245 阅读 · 0 评论 -
Linux0.11内核源码解析-open.c
fs/open.c实现文件的创建、打开、关闭,文件宿主和属性的修改、文件访问权限的修改、文件操作时间的修改等等。lib/open.c是up用户空间文件打开函数,lib/open.c->open()调用fs/open.c->sys_open()代码里都做了详细的解释这是一个用于表示UNIX操作系统中的i节点(inode)结构体。以下是每个变量的含义:- `i_mode`:i节点的访问模式(如文件、目录、设备等)。- `i_uid`:拥有该i节点的用户ID。原创 2023-07-07 10:23:37 · 535 阅读 · 0 评论 -
Linux0.11内核源码解析-read_write.c
read_write.c主要是实现文件系统调用read(),write()和lseek()三个功能read和write函数分别是调用file_dev.c/pipe.c/block_dev.c/char_dev.c实现相对应的函数。原创 2023-07-04 15:13:34 · 554 阅读 · 0 评论 -
Linux0.11内核源码解析-char_dev.c
char_dev.c文件包括字符设备文件访问函数,主要是有rw_ttyx(),rw_tty(),rw_memory()和rw_char()函数,另外还有一个设备读写函数指针表。原创 2023-07-04 11:15:53 · 363 阅读 · 0 评论 -
Linux0.11内核源码解析-pipe.c
进程间通信(IPC,Inter-Process Communication)是指在不同进程间进行数据通信和交换的过程。管道(pipe)是一种进程间通信的机制,它是一种单向、先进先出的通信方式。一个进程将数据写入管道,而另一个进程从管道中读取数据。在Linux或Unix系统中,进程间还可以使用共享内存、信号量、消息队列等不同的IPC机制进行通信。通过IPC,进程可以在互不依赖和独立运行的情况下,共享资源和数据,实现协同完成任务。原创 2023-06-20 15:13:19 · 543 阅读 · 0 评论 -
Linux0.11内核源码解析-bitmap.c
位图是一种用于描述二进制状态的数据结构,常用于表示数据是否存在、已使用等情况。在操作系统中,位图常用于管理内存分配、文件系统的索引节点等。初始化位图:将位图中所有位都置为指定的状态(0或1)。设置位图中指定位的状态:将指定位的状态设置为指定的值(0或1)。在位图中查找指定范围内第一个可用的位:从指定位置开始,查找第一个值为指定值(0或1)的位,并返回该位的索引值。在位图中查找指定范围内连续的可用位:从指定位置开始,查找指定数量的值为指定值(0或1)的连续位,并返回该连续位的起始索引值。原创 2023-06-14 11:47:09 · 929 阅读 · 0 评论 -
Linux0.11内核源码解析-file_dev.c
然后,代码通过增加位置(pos)来更新写入位置,并在需要时更新文件的大小(inode->i_size)和修改标记(inode->i_dirt = 1)。代码首先检查文件打开标志(filp->f_flags)是否包含O_APPEND标志,如果包含,则将写入位置(pos)设置为文件的当前大小(inode->i_size),否则将写入位置设置为文件指针(filp->f_pos)的值。如果成功读取到了磁盘块(bh非空),则代码会将该磁盘块中的数据逐个字节地复制到缓冲区中,然后释放该磁盘块(brelse(bh))。原创 2023-06-19 14:43:28 · 878 阅读 · 0 评论 -
Linux0.11内核源码解析-block_dev.c
代码首先根据位置指针将其右移 BLOCK_SIZE_BITS 位,得到块号(block),然后使用与运算将其与 (BLOCK_SIZE-1) 进行按位与操作,以获取在块内的偏移量(offset)。使用 get_fs_byte 函数从用户空间的缓冲区(buf)逐个字符地读取数据,并将其写入内核空间的缓冲区(p)。更新位置指针(*pos)的值,增加已写入的字节数(written),减少待写入的字节数(count)。更新位置指针(*pos)的值,增加已读取的字节数(read),减少待读取的字节数(count)。原创 2023-06-15 20:51:46 · 626 阅读 · 0 评论 -
Linux0.11内核源码解析-setup.s
先获得0x92端口的值并存放在al寄存器中,然后通过or将该寄存器的第二个bit设置为1。->加载中断描述符寄存器idtr和全局描述符表寄存器gdtr(为了让head.s在32位保护模式下运行,本程序中临时设置中断描述符idt和全局描述符gdt,并在gdt中设置了当前内核代码段的描述符和数据段的描述符,head.s程序中会根据内核的需要重新描述符表)取第一个硬盘的信息,第一个硬盘参数表首地址竟然是中断向量0x41,第二个硬盘参数表紧接第一个表的后面,中断向量0x46的向量值也指向第2个硬盘的参数表首地址。原创 2023-03-23 14:33:26 · 880 阅读 · 0 评论 -
Linux0.11内核源码解析-head.s
设置了 256 个中断描述符,并且让每一个中断描述符中的中断程序例程都指向一个 ignore_int 的函数地址,这个是个默认的中断处理程序,之后会逐渐被各个具体的中断程序所覆盖。高10位负责页目录表中找到页目录项,页目录项的值加上中间10位拼接后的地址去页表中寻找一个页表项,这个页表项的值再加上低12位的偏移地址,就是最终的物理地址。为调用main做准备,,压入三个参数envp,argv,argc但是main没有用到,在设置分页后调用ret指令会将main的地址弹出堆栈,执行main。原创 2023-03-23 14:36:48 · 1359 阅读 · 0 评论 -
Linux0.11内核源码解析-bootsect.s
>bios执行系统检测,从物理地址0初始化中断向量,将第一个引导扇区512字节读入内存绝对地址0x7c00(BIOS把512字节的二进制数据从硬盘搬到内存中,作为操作系统的开发人员,我们只需要把代码放到0盘0磁道1扇区即可,对应的代码是bootsect.s)出口参数:CF=1——操作失败,AH=状态代码,参见功能号01H中的说明,否则, BL=01H — 360K。出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明。DL=驱动器,00H~7FH:软盘;原创 2023-03-17 14:22:34 · 1057 阅读 · 0 评论