linux怎么打开文件,linux怎么打开exe程序

Linux内核启动及文件系统加载过程当u-boot开始执行bootcmd命令,就进入Linux内核启动阶段。普通Linux内核的启动过程也可以分为两个阶段。本文以项目中使用的linux-2.6.37版

Linux 内核启动及文件系统加载过程

当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段。普通 Linux 内核的启动过程也可以分为两个阶段。本文以项目中使用的 linux-2.6.37 版源码为例分三个阶段来描述内核启动全过程。第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式、使能 MMU 、设置一级页表等,而第三阶段则主要为C代码,包括内核初始化的全部工作。最后小编自己整理了一些个人觉得比较好的学习书籍、视频资料有需要的可以私信【内核】免费领取

一、 Linux 内核自解压过程

在 linux 内核启动过程中一般能看到图1内核自解压界面,本小节本文重点讨论内核的自解压过程。

内核压缩和解压缩代码都在目录 kernel/arch/arm/boot/compressed,linux怎么打开exe程序,编译完成后将产生head.o、misc.o、piggy.gzip.o、vmlinux、decompress.o 这几个文件。,

head.o 是内核的头部文件,负责初始设置;

misc.o 将主要负责内核的解压工作,它在head.o之后;

1、打开终端。点击菜单。2、然后找到终端程序。程序的图标是一个黑色的方框,上面有一个白色的“>_”。点击它。一般可以从菜单窗口的左侧栏中找到“终端”程序。3、在终端程序中输入vi 文件名.txt 。 命令中的“vi”部。

piggy.gzip.o 是一个中间文件,其实是一个压缩的内核( kernel/vmlinux ),只不过没有和初始化文件及解压文件链接而已;

decompress.o 是为支持更多的压缩格式而新引入的。

linux怎么打开文件

在 BootLoader完成系统的引导以后并将Linux内核调入内存之后,调用do_bootm_linux(),这个函数将跳转到kernel的起始位置。如果kernel没有被压缩,就可以启动了。如果kernel被压缩过,则要进行解压,在压缩过的kernel头部有解压程序。压缩过的kernel入口第一个文件源码位置在 arch/arm/boot/compressed/head.S。

它将调用函数 decompress_kernel(),这个函数在文件arch/arm/boot/compressed/misc.c 中,decompress_kernel() 又调用 proc_decomp_setup(),arch_decomp_setup() 进行设置,然后打印出信息“ Uncompressing Linux... ”后,调用gunzip() 将内核放于指定的位置。

下面简单介绍一下解压缩过程,也就是函数decompress_kernel实现的功能:解压缩代码位于 kernel/lib/inflate.c,inflate.c是从gzip 源程序中分离出来的,包含了一些对全局数据的直接引用,在使用时需要直接嵌入到代码中。gzip压缩文件时总是在前32K字节的范围内寻找重复的字符串进行编码, 在解压时需要一个至少为 32K 字节的解压缓冲区,它定义为 window[WSIZE] 。inflate.c 使用 get_byte() 读取输入文件,它被定义成宏来提高效率。输入缓冲区指针必须定义为inptr,inflate.c中对之有减量操作。 inflate.c调用 flush_window()来输出 window 缓冲区中的解压出的字节串,每次输出长度用 outcnt变量表示。在 flush_window() 中,还必须对输出字节串计算CRC并且刷新crc变量。在调用 gunzip() 开始解压之前,调用 makecrc() 初始化CRC 计算表。最后 gunzip() 返回 0 表示解压成功。我们在内核启动的开始都会看到这样的输出:

UncompressingLinux...done,booting the kernel.

call_kernel: blcache_clean_flushblcache_offmov r0,#0@ must be zeromov r1,r7@ restore architecture numbermov r2,r8@ restore atags pointermov pc,r4@ call kernel

其中 r4 中已经在head.S的第180行处预置为内核镜像的地址,如下代码:

0xf8000000add r4,r4,elseldr r4,=zreladdr#endif

这样就进入Linux内核的第一阶段,我们也称之为stage1

二、 Linux 内核启动第一阶段 stage1

承接上文,这里所以说的第一阶段 stage1 就是内核解压完成并出现 Uncompressing Linux...done,booting the kernel. 之后的阶段。该部分代码实现在arch/arm/kernel 的 head.S中,该文件中的汇编代码通过查找处理器内核类型和机器码类型调用相应的初始化函数,再建 立页表,最后跳转到start_kernel() 函数开始内核的初始化工作。检测处理器类型是在汇编子函数__lookup_processor_type 中完成的,通过以下代码可实现对它的调用: bl__lookup_processor_type (在文件head-commom.S 实现)。 __lookup_processor_type调用结束返回原程序时,会将返回结果保存到寄存器中。其中r5 寄存器返回一个用来描述处理器的结构体地址,并对r5进行判断,如果r5的值为0则说明不支持这种处理器,将进入 __error_p 。r8 保存了页表的标志位, r9 保存了处理器的 ID 号,r10保存了与处理器相关的struct proc_info_list结构地址。Head.S 核心代码如下:

ENTRY(stext)setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE,r9 @设置SVC模式关中断mrc p15,0,r9,c0,c0@ 获得处理器ID,存入r9寄存器bl__lookup_processor_type@ 返回值r5=procinfo r9=cpuidmovsr10,r5THUMB( it eq )@ force fixup-able long branch encodingbeq __error_p @如果返回值r5=0,则不支持当前处理器&ifdef CONFIG_SMP_ON_UP@ 如果是多核处理器进行相应设置bl__fixup_smp#endifbl__create_page_tables@最后开始创建页表

当检测处理器类型和机器码类型结束后,将调用 __create_page_tables子函数来建立页表,它所要做的工作就是将 RAM 基地址开始的1M 空间的物理地址映射到 0xC0000000开始的虚拟地址处。对本项目的开发板DM3730 而言,RAM 挂接到物理地址 0x80000000 处,当调用 __create_page_tables 结束后 0x80000000 ~ 0x80100000 物理地址将映射到 0xC0000000~0xC0100000 虚拟地址处。当所有的初始化结束之后,使用如下代码来跳到 C 程序的入口函数start_kernel()处,开始之后的内核初始化工作:bSYMBOL_NAME(start_kernel) 。

三、Linux内核启动第二阶段 stage2

利用Linux命令在终端打开文件的方法 在Linux环境下工作,大部分时间都是在与终端打交道,经常会遇到要查看某个文件,比如一个图片或者一个word文档(不能在终端中直接查看的)。这时通常的做法是切换到gui界面,到文件所在的。

从start_kernel函数开始

Linux内核启动的第二阶段从start_kernel函数开始。start_kernel 是所有Linux 平台进入系统内核初始化后的入口函数,它主要完成剩余的与 硬件平台相关的初始化工作,在进行一系列与内核相关的初始化后,调用第一个用户进程-init进程并等待用户进程的执行,这样整个Linux内核便启动完毕。该函数位于 init/main.c文件中,主要工作流程如图 所示:

该函数所做的具体工作有 :

1) 调用 setup_arch() 函数进行与体系结构相关的第一个初始化工作;对不同的体系结构来说该函数有不同的定义。对于ARM平台而言,该函数定义在arch/arm/kernel/setup.c 。它首先通过检测出来的处理器类型进行处理器内核的初始化,然后 通过bootmem_init()函数根据系统定义的 meminfo结构进行内存结构的初始化,最后调用paging_init()开启MMU,创建内核页表,映射所有的物理内存和 IO空间。

2) 创建异常向量表和初始化中断处理函数;

3) 初始化系统核心进程调度器和时钟中断处理机制;

4) 初始化串口控制台(console_init);

ARM-Linux 在初始化过程中一般都会初始化一个串口做为内核的控制台,而串口Uart驱动却把串口设备名写死了,如本例中 linux2.6.37串口设备名为 ttyO0,而不是常用的ttyS0。有了控制台内核在启动过程中就可以通过串口输出信息以便开发者或用户了解系统的启动进程。

5) 创建和初始化系统 cache,为各种内存调用机制提供缓存,包括;动态内存分配,虚拟文件系统(VirtualFile System )及页缓存。

6) 初始化内存管理,检测内存大小及被内核占用的内存情况;

7) 初始化系统的进程间通信机制(IPC); 当以上所有的初始化工作结束后, start_kernel() 函数会调用 rest_init() 函数来进行最后的初始化,包括创建系统的第一个进程-init 进程来结束内核的启动。

1、首先连接上linux主机,进入到需要打开文件的目录,例如“/home/httpd/html/test”。2、输入:vi test.txt,再按回车。3、此时打开了“test.txt”文本文件。

linux怎么打开文件

挂载根文件系统并启动 init

Linux 内核启动的下一过程是启动第一个进程 init ,但必须以根文件系统为载体,所以在启动init 之前,还要挂载根文件系统。

四、挂载根文件系统

根文件系统至少包括以下目录:

etc/ :存储重要的配置文件。

bin/ :存储常用且开机时必须用到的执行文件。

/sbin/ :存储着开机过程中所需的系统执行文件。

/lib/ :存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。

dev/ :存储设备文件。

注:五大目录必须存储在根文件系统上,缺一不可。

以只读的方式挂载根文件系统,之所以采用只读的方式挂载根文件系统是因为:此时Linux内核仍在启动阶段,还不是很稳定,如果采用可读可写的方式挂载根文件系统,万一Linux不小心宕机了,一来可能破坏根文件系统上的数据,再者Linux下次开机时得花上很长的时间来检查并修复根文件系统。

挂载根文件系统的而目的有两个:一是安装适当的内核模块,以便驱动某些硬件设备或启用某些功能;二是启动存储于文件系统中的init 服务,以便让 init服务接手后续的启动工作。

执行 init 服务

Linux内核启动后的最后一个动作,就是从根文件系统上找出并执行init服务。 Linux内核会依照下列的顺序寻找init服务:

1) /sbin/ 是否有 init 服务

2) /etc/ 是否有init 服务

3) /bin/ 是否有 init 服务

4)如果都找不到最后执行/bin/sh

1、首先找到所需要打开的.o后缀的文件。2、然后打开编译器这里使用c-free5,选择新建文件,保存为cpp格式。3、点击运行后发现在文件的末尾,出现了相同名字的.o后缀的文件。4、由此可推断当多种编程语言希望混合编译时,就。

找到 init服务后, Linux会让 init 服务负责后续初始化系统使用环境的工作, init启动后,就代表系统已经顺利地启动了linux内核。

启动init服务时,init服务会读取/etc/inittab文件,根据/etc/inittab中的设置数据进行初始化系统环境的工作。 /etc/inittab定义 init 服务在 linux启动过程中必须依序执行以下几个Script :

etc/rc.d/rc.sysinit

etc/rc.d/rc

/etc/rc.d/rc.local

/etc/rc.d/rc.sysinit主要的功能是设置系统的基本环境,当init服务执行rc.sysinit时 要依次完成下面一系列工作:

(1)启动udev

(2)设置内核参数

执行sysctl –p ,以便从 /etc/sysctl.conf 设置内核参数

(3)设置系统时间

将硬件时间设置为系统时间

(4)启用交换内存空间

执行 swpaon –a –e,以便根据/etc/fstab的设置启用所有的交换内存空间。

(5)检查并挂载所有文件系统

检查所有需要挂载的文件系统,以确保这些文件系统的完整性。检查完毕后以可读可写的方式挂载文件系统。

(6)初始化硬件设备

Linux除了在启动内核时以静态驱动程序驱动部分的硬件外,在执行rc.sysinit 时,也会试着驱动剩余的硬件设备。 r c.sysinit 驱动的硬件设备包含以下几项:

a)定义在/etc/modprobe.conf 的模块

b) ISA PnP的硬件设备

1、首先直接点击一个终端打开,输入命令sudo apt install okular进行安装。2、回车输入密码,按回车键。3、等到下载安装,进度百分之百,如图所示,不可以关闭终端。4、然后再应用程序点击menu,如图所示右侧,搜索Okular。5。

c) USB设备

(7)初始化串行端口设备

1、在Fedora桌面打开“Applications”-“System Tools”-“Terminal”打开命令终端,为vi编辑做准备。2、在终端切换到要编辑的二进制文件目录,然后输入“vi -b test.bin”,其中“test.bin”是我要编辑的二进制文件。当然也。

Init服务会管理所有的串行端口设备,比如调制解调器、不断电系统、串行端口控制台等。Init 服务则通过rc.sysinit来初始化linux 的串行端口设备。当rc.sysinit 发现 linux 才能在这 /etc/rc.serial 时,才会执行 /etc/rc.serial ,借以初始化所有的串行端口设备。因此,你可以在 /etc/rc.serial 中定义如何初始化 linux所有的串行端口设备。

(8)清除过期的锁定文件与IPC文件

linux怎么打开文件

(9)建立用户接口

在执行完3个主要的 RC Script 后, init服务的最后一个工作,就是建立linux的用户界面,好让用户可以使用 linux 。此时init 服务会执行以下两项工作:

(10)建立虚拟控制台

Init 会在若干个虚拟控制台中执行 /bin/login,以便用户可以从虚拟控制台登陆 linux 。 linux 默认在前6个虚拟控制台,也就是 tty1~tty6 ,执行 /bin/logi 登陆程序。当所有的初始化工作结束后,cpu_idle()函数会被调用来使系统处于闲置( idle)状态并等待用户程序的执行。至此,整个Linux内核启动完毕。整个过程见图4。

图4:linux内核启动及文件系统加载全过程

原文链接:(侵删)

上一篇 2023年02月11 05:47
下一篇 2023年02月20 11:32

相关推荐

  • obs怎么下载

    一款免费开源全媒体支持全平台推流串流的专业直播软件。简单几步就能实现你直播的愿望1.检查配置和网速、2.下载安装OBS、3.设置OBS参数、4.捕获画面、5.推流开播可以去手机浏览器里面下载,一般浏览

    2023年02月05 253
  • 显示器多少瓦,显示器多大瓦数

    IT之家1月10日消息,联合创新今日推出24C1F显示器,23.8英寸1080p75Hz规格,配备全功能USB-C和有线网口,显示器多大瓦数,首发价699元。,据介绍,联合创新24C1F显示器配备了2

    2023年02月26 292
  • 谷歌浏览器怎么登陆

    篇1-系统集成CAS实现单点登录什么是CAS?CAS的中文名称是中央认证服务,一种独立开放指令协议,它是为Web应用系统提供一种可靠的单点登录方法。CAS的特点Ø它是开源的企业级单点登录方案;ØCAS

    2023年02月05 277
  • win10系统多少钱,装正版win10系统多少钱

    有位用户和老毛桃说,电脑时常弹出一条系统即将过期的消息提醒,在无数次默默地点击关闭之后,电脑系统就这样“悄无声息”过期了!打开电脑,桌面上“windows未激活”这水印是那么的显眼。没错,系统真的是过

    2023年02月25 265
  • 苹果7摄像头多少钱,萍果7摄像头多少钱

    网上一直传言苹果的首款AR/VR眼镜可能会在今年春天发布。一份最新报告显示,这款产品被称作苹果“RealityPro”,主要技术能力包括“眼睛和手部追踪”。这份报告详细介绍了苹果的技术开发团队,该团队

    2023年03月13 218
  • 显示器怎么恢复出厂设置,显示器复位键在哪

    最近,我们评测了多款HKC旗下“猎鹰”系列的电竞显示器产品,显示器复位键在哪,尽管它们在外观上都采用了家族式设计,但是在实际体验上却又各有不同。今天,我们为大家带来的就是猎鹰系列的新成员,也是此前评测

    2023年02月08 231
  • 挖掘机多少钱一天,挖掘机干一天8小时多少钱

    近年来我国持续积极的财政政策,国家加大了对交通、能源、水利和环保等基础设施的建设力度,挖掘机干一天8小时多少钱,加快了城镇化以及城市现代化、智能化建设,各地大开挖加大铁路、高铁、公路和新兴市场等一系列

    2023年03月15 208
  • i5怎么样,第五代酷睿i5怎么样

    因为性价比高,入手了荣威i5,今天满打满算正好开了一个月,这一个月里大部分都是上下班开,也去苏州玩了一次,算一次短途自驾游吧,现在对于我来说i5这车已经操作的越来越熟悉了,第五代酷睿i5怎么样,来跟大

    2023年02月10 264
  • 行风热线电话是多少,行风热线电话是24小时

    明日预告12月29日8:30-9:30南阳市水利局四级调研员闫海涛带队值班《行风热线》,主要介绍2022年水利工作以及2023年规划情况。参加人员:河湖事务中心河道科科长齐跃基节水办计征科科长马栋邢台

    2023年03月20 266
  • 地球半径是多少,真正地球人早就死了

    我们人类这一物种,在地球上的生存已经有了几百万年的历史,自人类诞生以来,我们就一方面探索我们所生存的地球,另一方面,真正地球人早就死了,我们抬头看天,探索神奇的宇宙。由于古代人类的认知有限,对于宇宙的

    2023年02月17 232
  • 一个流量包多少钱,移动一个流量包多少钱啊

    如今,随着小视频时代的崛起,大流量卡几乎成为了每位朋友的必备。其实,在一般情况下,除去家用宽带必须的套餐外,移动一个流量包多少钱啊,在大流量使用的今天,套餐自带的流量是不一定够用的。再加上,如今运营商

    2023年03月19 231
  • 苹果怎么格式化,苹果的seid怎么提取六位

    如果你的iPhone用了很长时间,觉得卡顿、速度慢,这时可以将iPhone恢复出厂设置。那么,怎样才可以将苹果手机恢复出厂设置呢?接下来小编就给大家介绍将iPhone或iPad恢复出厂设置的详细操作方

    2023年02月12 269
关注微信