linux 带ifdef运行程序_如何让linux的一段程序代码进入内核态运行
展开全部
Linux内核的最初部分代码是用汇编语言写的(文件是boot/bootsect.s)。(我的汇编水平有限,暂且不看),636f707962616964757a686964616f31333335343334它首先把自身这部分代码移到绝对地址0x90000,把下面的2K代码从引导设备加载到地址0x90200上,内核的其余部分加载到地址0x10000处。在加载系统时显示“loading...”. 然后,程序控制权交给另一个实模式汇编程序(boot/Setup.S)。
接下来,此程序把整个系统从地址0x10000移到地址0x1000,进入保护模式。程序控制转给系统的其余部分即地址0x1000。
下一个步骤是系统内核的解压过程,这部分代码在地址0x1000(文件/Boot/head.S),该段程序初始化寄存器,然后执行decompress_kernel(),这个函数源于zBoot/inflate.c、zBoot/unzip.c和zBoot/misc.c三个文件Loading ....[ bootsect.S ]
uncompress .....[ decompress_kernel() ]
main.c ---> start_kernel() 开始.
开始 printk(banner);
Linux version 2.2.6 (root@lance) (gcc version 2.7.2.3) (检查一下GCC 的版本号, 在/init/main.c 中如果gcc 的版本号不够,时不允许编译内核的)
#40 Sun Apr 18 17:44:20 CST 1999
调用init_time()打印出以下内容:
Detected 199908264 Hz processor.
然后运行 console_init() --> drivers/char/tty_io.c */
Console: colour VGA+ 80x25
运行一个循环,测量一下 MIPS – 据说是要用一个确定的机器指令周期来实现实时的延迟.
Calibrating delay loop... 199.48 BogoMIPS
初始化内存/* init_mem */
Memory: 63396k/65536k available (848k kernel code, 408k reserved, 856k data
, 28k
/** dquote_init() **/
VFS: Diskquotas version dquot_6.4.0 initialized
察看cpu 的类型(在2.2.14 以后听说增加了对多种cpu 的支持, 以后我可得用心看看,if I can find a bug of intel then ……)
CPU: Intel Pentium Pro stepping 09
初始或处理器与协处理器,对于比较老的处理器, linux 会用软件模拟协处理器?
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
检查治理的合法性
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
此后调用 linux_thread(init ,..,..,)(arch/i386/kernel/process.c)
创建一个运行 init 的进程.
进入了第二阶段用户模式 ( user_mode )End of start_kerne最后进入cpu_idle ( arch/i386/kernel/process.c )
第二部分 设备的初始化
对设备的初始化调用. init()--->do_basic_init()--+
pci_init() 对pci 设备的初始化( 在main.c文件中有这样一段 ifdef PCI …..需要看一下)下面打印出结果:
PCI: PCI BIOS revision 2.10 entry at 0xfd8d1
PCI: Using configuration type 1
PCI: Probing PCI hardware
对Socket的初始化,socket_init() (这里也许就是linux 的网络秘密所在吧,以后我的注意) -Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
Starting kswapd v 1.5 kswapd_setup()
调用 device_setup()
Detected PS/2 Mouse Port.
初始化 声卡
Sound initialization started
Sound initialization complete
初始化 软驱
Floppy drive(s): fd0 is 1.44M
FDC 0 is a National Semiconductor PC87306
SCSI 设备的初始化
(scsi0) found at PCI 13/0
(scsi0) Wide Channel, SCSI ID=7, 16/255 SCBs
(scsi0) Downloading sequencer code... 419 instructions downloaded
scsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.1.10/3.2.4
scsi : 1 host.
Vendor: SEAGATE Model: ST32155W Rev: 0596
ype: Direct-Access ANSI SCSI revision: 02
Detected scsi disk sda at scsi0, channel 0, id 0, lun 0
Vendor: SEAGATE Model: ST32155W Rev: 0596
Type: Direct-Access ANSI SCSI revision: 02
Detected scsi disk sdb at scsi0, channel 0, id 1, lun 0
scsi : detected 2 SCSI disks total.
(scsi0:0:0:0) Synchronous at 40.0 Mbyte/sec, offset 8.
SCSI device sda: hdwr sector= 512 bytes. Sectors= 4197405 [2049 MB] [2.0 GB ](scsi0:0:1:0) Synchronous at 40.0 Mbyte/sec, offset 8.
SCSI device sdb: hdwr sector= 512 bytes. Sectors= 4197405 [2049 MB] [2.0 GB]Partition check: sda: sda1 |
sdb: sdb1 sdb2 |
安装 文件系统 filesystem_setup()
安装设备驱动程序 mount_root()
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 28k freed
Adding Swap: 66540k swap-space (priority -1)
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996
SB 3.01 detected OK (220)
at 0x220 irq 5 dma 1
YM3812 and OPL-3 driver Copyright (C) by Hannu Savolainen, Rob Hooft 1993-1
996 at 0x388
NET4: AppleTalk 0.18 for Linux NET4.0
eth0: Intel EtherExpress Pro 10/100 at 0xf800, 00:A0:C9:49:2F:FF, IRQ 9.
Board assembly 645520-034, Physical connectors present: RJ45
Primary interface chip DP83840 PHY #1.
DP83840 specific setup, setting register 23 to 8462.
General self-test: passed.
Serial sub-system self-test: passed.
Internal registers self-test: passed.
ROM checksum self-test: passed (0x49caa8d6).
Receiver lock-up workaround activated.
NET4: AppleTalk 0.18 for Linux NET4.0
结束 do_basic_setup()
open("/dev/console", O_RDWR, 0)
开始执行 /sbin/init ( execv(...) )
内核就此启动完毕...
linux 带ifdef运行程序_如何让linux的一段程序代码进入内核态运行相关推荐
- c++读取声音文件之后回音_一段程序运行之后,输出的内容就是这段程序本身。...
在通过了Adalab的入学赛选挑战者赛之后,Adalab联合创始人 @小熊 给我出了一道加式题: 用你最擅长的语言写一段程序,这段程序运行之后,输出的内容就是这段程序本身. 第一眼看到这个题目, 我就 ...
- Linux 一个进程如何从用户态切换到内核态运行
首先我们先理解用户态和内核态的概念 用户态:当一个进程调用库函数时就会进入用户态或者自己写的代码都是运行在用户态,使用的地址都是用的用户态中的地址 内核态:当要完成系统核心功能时要运行的状态 一个进程 ...
- linux 带ifdef运行程序_Linux内核分析——可执行程序的装载
马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 可执行程序的装 ...
- linux 带ifdef运行程序_Linux内核如何装载和启动一个可执行程序
郑斌+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验要求: 理解编译 ...
- linux上开发应用程序_如何在Linux上安装软件应用程序
linux上开发应用程序 如何在Linux上安装应用程序? 与许多操作系统一样,该问题不仅有一个答案. 应用程序可以来自许多来源-几乎无法计数-每个开发团队都可以以自己认为最佳的方式交付软件. 知道如 ...
- linux 开机自动运行命令_如何在Linux终端同时运行多个Linux命令
在一行中运行两个或多个命令可以节省大量时间,并在Linux中提高效率.在Linux中,有三种方法可以在一行中运行多个命令: ; Command 1 ; Command 2 首先运行Command1,然 ...
- jlink怎么调试linux程序_使用jlink+gdbserver+insight调试ARM程序--配置insight
1. 下载insight-6.8a.tar.bz2 编译: ./configure --target=arm-linux --prefix=/opt/insight_arm --disable-we ...
- linux wait函数头文件_手把手教Linux驱动9-等待队列waitq
在上一篇<手把手教Linux驱动8-Linux IO模型>我们已经了解了阻塞.非阻塞.同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞. 应用场景: 当进程要获取某些资源 ...
- 谷歌地图api 微信小程序_使用Google的融合位置提供程序API进行实时位置跟踪
谷歌地图api 微信小程序 Location tracking and monitoring have seen a surge in modern application development w ...
最新文章
- Java json转Map,转bean,转Listbean
- centos 的epel源配置
- Micropython TPYBoard v102 自动浇花实验
- php 语法 条件变量,C ++核心准则:注意条件变量的陷阱
- numpy.mod详解
- [总结] 平衡树总结
- pb 执行存储过程带参数_数据库存储过程
- axios get传参_axios 传数组或对象格式的参数用GET和POST的区别
- Lingo计算最优解
- js 对Array的补充
- 稳居TIOBE前三,涨幅No.1,Python做了什么?
- Python 数据结构与算法 —— list与deque(双端队列)
- docker学习系列11 多阶段镜像构建
- 20种最常见的网络安全攻击类型
- SECS半导体通信委员会参考书
- 第一章 绪论 1.2 时域采样定理及其应用
- 《Sass 基础教程》共40节宁皓网课程
- Win11环境 jdk1.8安装及配置详细教程
- Web前端_邮箱的正则表达式
- 苹果8黑屏无法强制开机_【维修案例】苹果xsmax黑屏死机不开机,如何解决?!...