
嵌入式之Linux内核学习
文章平均质量分 77
xuqianghit
互联网门外汉
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux 0.11 内核学习 -- bootsect.s, 万里长征第一步
呵呵,终于将linux 0.11 下面的boot文件夹下的三个文件读完,下面是相关注释,没有汇编基础的人也是可以读的。废话少说,下面就是linux的源码了。 参考资料 Linux内核完全注释.pdf 网上相关资料 !时间 : 2010-1-14!工作 : 阅读linux 0.11 源码中的bootsect.s!总体linux启动过程如下:!!当PC得原创 2010-01-19 08:29:00 · 1190 阅读 · 0 评论 -
linux 0.11 内核学习 -- truncate.c
/* * 该文件主要实现的是truncate函数,该函数是释放指定i * 节点在设备上占用的所有逻辑块,包括直接块、一次间 * 接块和二次间接块 *//* * linux/fs/truncate.c * * (C) 1991 Linus Torvalds */ #include #include /* 释放一次间接块,参数原创 2010-02-08 11:05:00 · 1022 阅读 · 0 评论 -
linux 0.11 内核学习 -- pipe.c
/* * 该文件中的两个函数read_pipe和write_pipe是上层函数 * read和write的底层实现 *//* * linux/fs/pipe.c * * (C) 1991 Linus Torvalds */ #include #include // 内存管理头文件。含有页面大小定义和一些页面释放函数原型#inclu原创 2010-02-08 11:13:00 · 1061 阅读 · 0 评论 -
linux 0.11 内核学习 -- char_dev.c
/* * linux/fs/char_dev.c * * (C) 1991 Linus Torvalds */ #include #include // 定义了基本的系统数据类型 #include #include // 含有一些内核常用函数的原形定义 #include #include /* 中断读 */extern原创 2010-02-08 11:08:00 · 1020 阅读 · 0 评论 -
linux 0.11 内核学习 -- file_dev.c
/* * linux/fs/file_dev.c * * (C) 1991 Linus Torvalds */ #include #include #include #include #include #define MIN(a,b) (((a)#define MAX(a,b) (((a)>(b))?(a):(b)) /原创 2010-02-08 11:16:00 · 714 阅读 · 0 评论 -
linux 0.11 内核学习 -- exec.c
/* * 该文件主要是实现do_execve函数,主要是实现对于二进制文件的加载执行 * 和shell脚本文件的加载执行 *//* * linux/fs/exec.c * * (C) 1991 Linus Torvalds */ /* * #!-checking implemented by tytso. */ /* * Dem原创 2010-02-09 22:53:00 · 1495 阅读 · 1 评论 -
linux 0.11 内核学习 -- block_dev.c
/* * 该文件的两个函数是为了向open和write函数提供接口,实现内核数据 * 和用户数据的交互 *//* * linux/fs/block_dev.c * * (C) 1991 Linus Torvalds */ #include #include #include #include #include /*原创 2010-02-16 09:12:00 · 1310 阅读 · 0 评论 -
linux 0.11 内核学习 -- inode.c
/* * linux/fs/inode.c * * (C) 1991 Linus Torvalds */ #include #include // 文件状态头文件 #include #include #include #include struct m_inode inode_table[NR_INODE]={{0,},};原创 2010-02-16 09:15:00 · 1481 阅读 · 0 评论 -
linux 0.11 内核学习 -- head.s
## 这段代码被连接到system模块的最前面,这也是它为什么称之为head.s的原因。# 从这里开始内核完全运行在保护模式下。head.s采用的是at&t格式的# 汇编。注意的是代码中的赋值方向是从左到右。# # 这段程序实际上是出于内存的绝对地址0开始处。首先是加载各个数据段寄存器。# 重新设置全局描述符表gdt --> 检测a20地址线是否真的开启,没有开启,lo原创 2010-02-16 09:07:00 · 968 阅读 · 0 评论 -
linux 0.11 内核学习 -- bitmap.c
/* * linux/fs/bitmap.c * * (C) 1991 Linus Torvalds */ /* bitmap.c contains the code that handles the inode and block bitmaps */#include #include #include // 一些内核常用函数的原形定义原创 2010-02-16 09:10:00 · 1284 阅读 · 0 评论 -
linux 0.11 内核学习 -- ioctl.c
/* * ioctl.c 文件实现了输入/输出控制系统调用ioctl(),该函数 * 主要是调用函数tty_ioctl()对终端的IO进行控制 *//* * linux/fs/ioctl.c * * (C) 1991 Linus Torvalds */ #include #include #include #include原创 2010-02-16 09:17:00 · 904 阅读 · 0 评论 -
c语言位操作在内核中应用
1. “按位与”运算符(&) 参加运算的两个数据,按二进位进行“与”运算。原则是全1为1,有0为0,即:0&0=0; 0&1=0; 1&0=0; 1&1=1; 如下例: a=5&3; //a=(0b 0101) & (0b 0011) =0b 0001 =1 那么如果参加运算的两个数为负数,又该如何算呢?会以其补码形式表示的转载 2010-02-12 23:53:00 · 592 阅读 · 0 评论 -
linux 0.11 内核学习 -- namei.c。
文件可能比较长,呵呵。 /* * linux/fs/namei.c * * (C) 1991 Linus Torvalds */ /* * Some corrections by tytso. */ #include #include #include #include #include #include #i原创 2010-02-06 22:53:00 · 1552 阅读 · 0 评论 -
linux 0.11 文件系统(一)
文件系统和内存管理,以及进程管理是操作系统的核心部分。数据通常以文件的形式存储在设 备上,因此文件系统的基本功能就是以某种格式存取/控制文件。0.11版的内核中采用了minix1.0版的文件系统。在最新的2.6版内核中,借助于 VFS,系统支持50多种文件系统。首先介绍一下minix文件系统minix文件系统和标准unix文件系统基本相同。它由6个部分组 成,分别是:引导块,超级块,i节点位图,逻转载 2010-02-04 10:10:00 · 1547 阅读 · 0 评论 -
linux 0.11 文件系统(二)
超级块描述了整个文件系统的信息,而文件作为存储的对象,它的信息是有inode节点来描述的。i节点位图描述了inode的使用情况。struct m_inode{ unsigned short i_mode; //文件类型 unsigned short i_uid;//文件宿主 unsigned long i_size;//文件大小 unsign原创 2010-02-04 10:12:00 · 1030 阅读 · 0 评论 -
linux 0.11 内核学习 -- setup.s
参考资料 Linux内核完全注释.pdf 网上相关资料 ! setup程序的主要作用是利用rom bios的中断来读取机器系统参数,并将这些数据保存在0x90000! 开始的位置(覆盖掉了bootsect程序所在的位置),所取得的参数被内核的相关程序使用。注意在bootsect! 中已经将该模块和system、模块加载到内存中。! 然后setup程序将system原创 2010-01-19 08:36:00 · 976 阅读 · 0 评论 -
linux下内存管理简介
计算机中的存储器分为:主存和辅存。其中需要指明的是主存是可以被处理器直接访问的,而辅存是不能被处理器直接访问的。主存的容量一般相对于辅存而言是较小的,所以在现代的计算机体系中,通常使用的是耳机存储模式。利用辅存的大容量来提供较大的存储空间,存储准备运行的程序和数据,当需要时,在将其载入主存中。计算机中的存储管理都是由操作系统来实现的。但是需要说明的是操作系统在实现存储管理时需要硬件的支持。比如原创 2010-01-17 09:53:00 · 676 阅读 · 0 评论 -
linux 0.11 内核学习 -- main.c,调用函数而已。
到了main.c,其实main.c中的大部分的内容是调用函数来实现初始化的工作,但是还是将它看完了。下面就是代码了。主要参考的是linux内核完全注释,在一些不太明白的地方,参考网上的介绍。废话少说。还有很长的路啊。努力啊O(∩_∩)O~。 /* * main.c功能描述。 *///main.c程序的主要功能是利用setup.s程序取得的系统参数设置系统的// 的根文件设备号和一些全局变量原创 2010-01-20 09:33:00 · 1527 阅读 · 0 评论 -
linux0.11系统调用的执行过程是怎样的?
linux0.11系统调用的执行过程是怎样的? (1) 答:当执行系统调用函数时,系统调用函数会执行int 0x80中断命令,同时将系统调用号放入eax寄存器中,并将要传递给系统的参数放入ebx,ecx,edx中。中断处理程序会执行system_call()函数。(2) system_call()函数首先保存原段寄存器,在将调用参数压转载 2010-01-20 22:53:00 · 966 阅读 · 1 评论 -
linux 0.11 内核学习 -- asm.s,机器难免出故障。
/* * linux/kernel/asm.s * * (C) 1991 Linus Torvalds */ /* * asm.s contains the low-level code for most hardware faults. * page_exception is handled by the mm, so that isnt here.原创 2010-01-28 21:50:00 · 811 阅读 · 0 评论 -
linux 0.11 内核学习 -- system_call.s,系统调用仅是如此。
/* * 本程序主要是实现系统调用中断int 0x80的入口处理过程机信号检测过程, * 同时给出了两个系统调用功能的底层接口sys_execve和sys_fork。还列出了 * 处理过程类似的协处理器出错int 16,设备不存在int 7,硬盘中断int 46, * 软盘中断int 38的中断处理程序。 * */ /* * linux/kernel/sy原创 2010-01-28 21:53:00 · 1697 阅读 · 0 评论 -
linux 0.11 内核学习 -- sched.c,调度进程。
/* * 2010-1-21 * 该文件时内核中有关任务调度的函数程序,其中包含基本函数sleep_on, * wakeup,schedule等,以及一些简单的系统调用。同时将软盘的几个操作 * 函数也放置在这里。 * * schedule函数首先对所有的任务检查,唤醒任何一个已经得到信号的任务, * 具体的方法是针对任务数组中的每个任务,检查其警报定时值alar原创 2010-01-28 21:57:00 · 1781 阅读 · 0 评论 -
linux 0.11 内核学习 -- floppy.c,驱动你的软盘
/* * linux/kernel/floppy.c * * (C) 1991 Linus Torvalds */ /* * 02.12.91 - Changed to static variables to indicate need for reset * and recalibrate. This makes some things easier (原创 2010-01-29 19:21:00 · 1614 阅读 · 0 评论 -
linux 0.11 内核学习 -- console.c,控制台
参考《linux内核完全注释》和网上相关文章/* * 控制台显示操作 *//* * linux/kernel/console.c * * (C) 1991 Linus Torvalds */ /* * console.c * * This module implements the console io functions * v原创 2010-02-01 10:00:00 · 1747 阅读 · 0 评论 -
linux 0.11 内核学习 -- keyboard.s,键盘原来是这么干的。
/* * linux/kernel/keyboard.S * * (C) 1991 Linus Torvalds */ /* * Thanks to Alfred Leung for US keyboard patches * Wolfgang Thiel for German keyboard patches * Marc Corsini for原创 2010-01-29 22:49:00 · 2578 阅读 · 0 评论 -
linux 0.11 内核学习 -- rs_io.s,串口汇编代码
/* * 该文件实现rs232 串行通信中断处理 *//* * linux/kernel/rs_io.s * * (C) 1991 Linus Torvalds */ /* * rs_io.s * * This module implements the rs232 io interrupts. */ .text.glob原创 2010-02-01 15:33:00 · 825 阅读 · 0 评论 -
linux 0.11 内核学习 -- fcntl.c
/* * linux/fs/fcntl.c * * (C) 1991 Linus Torvalds */ #include #include #include #include #include #include #include extern int sys_close(int fd); /* 复制文件句柄,参数f原创 2010-02-16 09:13:00 · 693 阅读 · 0 评论