2007.6.4.am
今天讨论到内核启动阶段对外部设备初始化的过程,于是粗略的看了一下相关代码,得到以下一些印象(未必正确,希望大家指正):
1.对外部设备初始化代码出现的地方应该是init()进程
(bootloader->start汇编->decompress->start_kernel()->rest_init()->kernel_thread()->init() )
2.init()里的do_basic_setup(),do_basic_setup()调用driver_init()和do_initcalls()
3.driver_init()初始化各种外部设备、总线等的kobject结构
4.do_initcalls()用result = (*call)();这句代码在for循环中去调用.initcall.init节中的各个驱动初始化函数指针去执行初始化。在arch/xxx/vmlinux.lds中会有对__initcall_start和__initcall_end的定义。
5.驱动程序初始化代码中会有probe函数去探测设备。
2007.6.4.pm
进程描述符:task_struct 该结构由叫做任务队列(task list)的双向循环链表管理,该结构包含内核管理一个进程所需的所有信息(进程打开的文件、进程的地址空间、挂起的信号、进程的状态等等),linux通过slab分配器分配task_struct结构。
写时拷贝:fork时并不复制整个进程地址空间,而是让父进程与子进程共享一个拷贝,只有在需要写入的时候,数据才会被复制,这使得地址空间上页的拷贝被推迟到实际发生写入的时候。比如说fork后直接调用exec,那么就无需复制了。
fork( ):fork->clone->do_fork->copy_process和wake_up_new_task
线程在Linux上的实现:从内核的角度来说,Linux没有线程这个概念,它把所有线程都当作进程处理,线程仅仅被视为一个与其他进程共享某些资源的进程,每个线程都拥有唯一隶属于自己的task_struct。创建线程时通过clone( )传递的标志位来指明需要共享的资源。
-
CLONE_FILES 共享打开的文件
-
CLONE_SIGHAND 共享信号处理函数
-
CLONE_VM 共享地址空间
分享到:
相关推荐
Linux内核与设备驱动程序学习资料笔记+源码.zipLinux内核与设备驱动程序学习资料笔记+源码.zipLinux内核与设备驱动程序学习资料笔记+源码.zipLinux内核与设备驱动程序学习资料笔记+源码.zipLinux内核与设备驱动程序...
Linux内核与设备驱动程序学习笔记及源码.zip Linux内核与设备驱动程序学习笔记及源码.zip Linux内核与设备驱动程序学习笔记及源码.zip Linux内核与设备驱动程序学习笔记及源码.zip Linux内核与设备驱动程序学习笔记...
《linux设备驱动程序》(第三版)的学习笔记,对于学习设备驱动的朋友十分有用
·Linux设备驱动程序学习(16)-USB 驱动程序(一) ·Linux设备驱动程序学习(17)-USB 驱动程序(二) ·Linux设备驱动程序学习(18)-USB 驱动程序(三) ·Linux设备驱动程序学习(19)-USB 驱动程序(四)
Linux内核与设备驱动程序学习笔记
jz2440学习笔记 本仓库内容 jz2440学习笔记 思维导图 ARM体系架构学习 Linux内核驱动学习
基于学习的Linux3.5内核的写的一些实例,如果想要源码我可以问我一声,我分享给你。
个人学习笔记 , 涵盖C , C++, Linux驱动, Linux内核, 嵌入式, 数据结构, 算法, QT, Android安卓, 音视频, 物联网 , 正在逐步更新 , 使用的typora编辑 , 大家可以使用 typora 打开查看 , 床图为 gitee Linux项目是一...
该项目以Linux内核为核心,围绕其构建了一个完整的操作系统,包括各种系统工具、库、应用程序和硬件支持。 以下是Linux项目的一些主要特点和资料介绍: 开放源代码:Linux项目的所有源代码都是公开的,并允许任何...
详细介绍了linux字符设备驱动程序,对各个名词做了自己的理解,在学习中的笔记,有错误还请海涵
armlinux学习笔记--IIS音频驱动程序分析
在系统学习Linux的过程中的,Linux设备驱动开发学习的笔记,笔记有两部分,这是下篇,主要学习内容是《Linux设备驱动开发详解》的7-9章。
个人学习笔记 , 涵盖C , C++, Linux驱动, Linux内核, 嵌入式, 数据结构, 算法, QT, Android安卓, 音视频, 物联网 , 正在逐步更新 , 使用的typora编辑 , 大家可以使用 typora 打开查看 , 床图为
Linux内核中有上百个驱动,知识点多且杂,对于想学习驱动的同学来说,需要尽快掌握基础知识:如开发板的基本使用,硬件基础知识,开发环境的搭建,Linux常用工具,内核的编译以及烧写,Linux shell命令,C语言基础,...
这个是我学习内核驱动时候最基本的驱动框架笔记,是不是特别全我不大记得了,反正是最基础的东西
LINUX内核USB子系统学习笔记之初识USB.pdf kernel hacker修炼之道之驱动-流水灯.pdf kernel hacker修炼之道之驱动-混杂设备.pdf kernel hacker修炼之道之驱动-按键.pdf kernel hacker修炼之道之PCI ...
LDD-LinuxDeviceDrivers#1书籍-一些书中的原始码和范例目录书籍#2 study--本人的linux学习以及驱动代码目录书籍学习Linux内核的设计与实现,包括文档和示例代码,文档与同步更新自己实现的一些linux内核的驱动代码...
本书作者在整理自己多年研发笔记的基础上,以精心挑选的典型开发实例,向读者详细讲述了Linux内核源代码的各部分结构、原理及组成框架,主要分析了 Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux内核...
感谢网友diytvgy的总结,原文请访问作者博客。...总结是根据学习时的笔记(李杨老师授课)、《linux内核设计与实现》第三版、《linux设备驱动程序》第三版和 《linux设备驱动开发详解》第一版来归纳的
描述硬件得文本文件,因为语法结构像树所以叫设备树 > DT:device tree:设备树(arm下表示) > FDT: flattened device tree:开放设备树、扁平设备树(powerpc使用的设备树,起源的设备又称openFirmware)因为...