ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
Linux内核紧张由五个子体系构成:进程调理,内存办理,假造文件体系,网络接口,进程间通讯。
1.进程调理(SCHED):控制进程对CPU的访问。当须要选择下一个进程运行时,由调理步调选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,要是某个进程在等待别的资源,则该进程是不可运行进程。Linux利用了比较大抵的基于优先级的进程调理算法选择新的进程。
2.内存办理(MM)允很多个进程沉寂的共享主内存地区。Linux的内存办理支持假造内存,即在谋略机中运行的步调,其代码,数据,堆栈的总量可以超过跨过实际内存的大小,利用体系只是把当前利用的步调块生存在内存中,别的的步调块则生存在磁盘中。须要时,利用体系认真在磁盘和内存间互换步调块。内存办理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对调;硬件干系的部分为内存办理硬件提供了假造接口。
3.假造文件体系(VirtualFileSystem,VFS)潜伏了种种硬件的细致细节,为全部的配置提供了同一的接口,VFS提供了多达数十种差别的文件体系。假造文件体系可以分为逻辑文件体系和配置驱动步调。逻辑文件体系指Linux所支持的文件体系,如ext2,fat等,配置驱动步调指为每一种硬件控制器所编写的配置驱动步调模块。
4.网络接口(NET)提供了对种种网络标准的存取和种种网络硬件的支持。网络接口可分为网络协讲和网络驱动步调。网络协议部分认真实现每一种大概的网络传输协议。网络配置驱动步调认真与硬件配置通讯,每一种大概的硬件配置都有相应的配置驱动步调。
5.进程间通讯(IPC) 支持进程间种种通讯机制。
处于中间位置的进程调理,全部别的的子体系都依赖它,由于每个子体系都须要挂起或光复进程。一样通常环境下,当一个进程等待硬件利用完成时,它被挂起;当利用真正完成时,进程被光复实行。比喻,当一个进程通过网络发送一条消息时,网络接口须要挂起发送进程,直到硬件告成地完成消息的发送,当消息被告成的发送出去以后,网络接口给进程返回一个代码,表现利用的告成或失败。其他子体系以相似的来由依赖于进程调理。
各个子体系之间的依赖干系如下:
进程调理与内存办理之间的干系:这两个子体系相互依赖。在多道步调环境下,步调要运行必须为之创建进程,而创建进程的第一件变乱,便是将步调和数据装入内存。
进程间通讯与内存办理的干系:进程间通讯子体系要依赖内存办理支持共享内存通讯机制,这种机制容许两个进程除了拥有本身的私有空间,还可以存取共同的内存地区。
假造文件体系与网络接口之间的干系:假造文件体系利用网络接口支持网络文件体系(NFS),也利用内存办理支持RAMDISK配置。
内存办理与假造文件体系之间的干系:内存办理利用假造文件体系支持互换,互换进程(swapd)定期由调理步调调理,这也是内存办理依赖于进程调理的唯一缘故因由。当一个进程存取的内存映射被换出时,内存办理向文件体系发出恳求,同时,挂起当前正在运行的进程。
除了这些依赖干系外,内核中的全部子体系还要依赖于一些共同的资源。这些资源包括全部子体系都用到的进程。比喻:分派和开释内存空间的进程,打印告诫或错误信息的进程,另有体系的调试例程等等。
体系数据布局
在linux的内核的实现中,有一些数据布局利用频度较高,他们是:
task_struct.
Linux内核利用一个数据布局(task_struct)代表一个进程,代表进程的数据布局指针形成了一个task数组(Linux中,任务和进程是雷同的术语),这种指针数组偶然偶尔也称为指针向量。这个数组的大小由NR_TASKS(默以为512),表明Linux体系中最多能同时运行的进程数量。当创建新进程的时间,Linux为新进程分派一个task_struct布局,然后将指针生存在task数组中。调理步调不绝维护着一个current指针,他指向当前正在运行的进程。
Mm_struct
每个进程的假造内存由一个mm_struct布局来代表,该布局实际上包括了当前实行映像的有关信息,并且包括了一组指向vm_area_struct布局的指针,vm_area_struct布局形貌了假造内存的一个地区。
Inode
假造文件体系(VFS)中的文件、目次等均由映射的索引节点(inode)代表。每个VFS索引节点中的内容由文件体系专属的例程提供。VFS索引节点只存在于内核内存中,实际生存于VFS的索引节点高速缓存中。要是两个进程用雷同的进程打开,则可以共享inade的数据布局,这种共享是通过两个进程中数据块指向雷同的inode完成。
Linux的细致布局
所谓细致布局是指体系实现的布局。
Linux的细致布局雷同于抽象布局,这种映射性是由于抽象布局源头于细致布局,我们的分别没有严格依照源代码的目次布局,且和子体系的分组也不完全结婚,但是,它很靠近源代码的目次布局。
只管前面的讨论的抽象布局表现了各个子体系之间只有很少的依赖干系,但是细致布局的5个子体系之间有高度的依赖干系。我们可以看出,细致布局中的很多依赖干系并没有在抽象布局中出现。
Linux内核源代码
如今,较新而又稳固的内核版本是2.0.x和2.2.x,由于版本差别稍有差别,因此要是你想让一个新的驱动步调既支持2.0.x,又支持2.2.x,就须要根据内核版本举行条件编译,要作到这一点,就要支持宏LINUX_VERSION_CODE,倘若内核的版本用a.b.c来表现,这个宏的值便是216a+28b+c。要用到指定内核版本的值,我们可以用KERNEL_VERSION宏,我们也可以本身去定义它。
对内核的修改用补丁文件的要领颁发的。Patch实用步调用来用来对内核源文件举行一系列的修改。比喻:你有2.2.9的源代码,但想移到2.2.10。就可以得到2.2.10的补丁文件,应用patch来修改2.2.9源文件。比喻:
$ cd /usr/src/linux
$ patch –pl < patch-2.2.10
Linux 内核源代码的布局
Linux内核源代码位于/usr/src/linux目次下。
/include子目次包括了创建内核代码时所需的大部分包括文件,这个模块利用其他模块重修内核。
/init 子目次包括了内核的初始化代码,这是内核变乱的开始的出发点。
/arch子目次包括了全部硬件布局特定的内核代码。如:i386,alpha
/drivers子目次包括了内核中全部的配置驱动步调,如块配置和SCSI配置。
/fs子目次包括了全部的文件体系的代码。如:ext2,vfat等。
/net子目次包括了内核的连网代码。
/mm子目次包括了全部内存办理代码。
/ipc子目次包括了进程间通讯代码。
/kernel子目次包括了主内核代码。
从那边开始阅读源代码?
在Internet,有人制作了源代码导航器,为阅读源代码提供了精良的条件,站点为lxr.linux.no/source。
下面给出阅读源代码的线索:
体系的启动和初始化:
在基于Intel的体系上,当loadlin.exe或LILO把内核装入到内存并把控制权转达给内核时,内核开始启动。关于这一部分请看,arch/i386/kernel/head.S,head.S举行特定布局的设置,然后跳转到init/main.c的main()例程。
内存办理:
内存办理的代码紧张在/mm,但是特定布局的代码在arch/*/mm。缺页克制处理惩罚处罚的代码在/mm/memory.c ,而内存映射和页高速缓存器的代码在/mm/filemap.c 。缓冲器高速缓存是在/mm/buffer.c 中实现,而互换高速缓存是在mm/swap_state.c和mm/swapfile.c。
内核:
内核中,特定布局的代码在arch/*/kernel,调理步调在kernel/sched.c,fork的代码在kernel/fork.c,内核例程处理惩罚处罚步调在include/linux/interrupt.h,task_struct数据布局在inlucde/linux/sched.h中。
PCI:
PCI伪驱动步调在drivers/pci/pci.c,其定义在inclulde/linux/pci.h。每一种布局都有一些特定的PCI BIOS代码,Intel的在arch/alpha/kernel/bios32.c中。
进程间通讯:
全部的SystemVIPC东西权限都包括在ipc_perm数据布局中,这可以在include/linux/ipc.h中找到。SystemV消息是在ipc/msg.c中实现。共享内存在ipc/shm.c中实现。信号量在ipc/sem.c中,管道在/ipc/pipe.c中实现。
克制处理惩罚处罚:
内核的克制处理惩罚处罚代码险些全部的微处理惩罚处罚器特有的。克制处理惩罚处罚代码在arch/i386/kernel/irq.c中,其定义在include/asm-i386/irq.h中。
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号