标签: boot

没有操作系统的执行

如何将C程序编译为有效的ELF格式(或RAW格式),以便可以在没有任何操作系统的情况下直接从RAM执行?假设存在一个能够将代码加载到RAM中的任何位置并开始在该地址执行的引导加载程序.确切地说,编译器(GCC)标志应该是什么?是否需要地图文件?

欢迎使用示例helloworld应用程序:)

为了详细说明我的观点,
让main()方法成为一个空的无限while循环,以确保不使用OS特定的或标准的库调用.期望的o/p是一个悬念.使用通常的GCC选项,引导加载程序肯定无法加载可执行文件,因为它是无效的ELF格式.但是,通过将-dN选项传递给链接器将使其成为有效的ELF.需要更多编译器/链接器选项才能使其挂起而不会崩溃!这些编译器选项究竟是什么?

file.c:
int main()
{
    while(1);
}
Run Code Online (Sandbox Code Playgroud)

编译
gcc -c -nostdinc -fno-builtin
file.c ld -dN -nostdlib file.o

Bootloader将a.out加载到RAM并执行.

c linux boot bootstrapping bare-metal

9
推荐指数
1
解决办法
923
查看次数

如何在Android中制作我们自己的锁屏而不是默认锁屏

我有一个想法创建我自己的手机锁应用程序类似于Android模式锁.每当手机启动/重启/手机,锁定/电话和解锁时,我都需要显示或启动我的应用程序.我不知道如何使应用程序显示而不是默认锁定屏幕并隐藏默认锁定屏幕.所以我的问题是:

  1. 如何显示或启动我的应用程序而不是默认锁定屏幕
  2. 什么是

    getWindow().addFlags(
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
      WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
      WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
      WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    
    Run Code Online (Sandbox Code Playgroud)

这有用吗?

  1. 什么是

    public class BootReciever extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction() != null) {
                if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
                Intent s = new  Intent(context,ViewPagerMainActivity.class);
                s.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(s);
                }
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

这有用吗?

  1. 在我的应用完成其工作后,您如何显示主页?

java boot android lockscreen

9
推荐指数
1
解决办法
3万
查看次数

我如何知道系统是否已启动?

我正在编写一个通过网络启动系统的脚本.然后我需要在另一台主机上运行一些命令.我如何知道系统是否已开机?

我的编程语言是Perl,目标主机是RHEL5.

是否有任何内核中断或网络启动信息表明系统已启动且操作系统已加载?

[在另一种情况下]我也想知道以防我是否只是手动打开我的机器.什么时候才能确切地说已打开电源.何时OS应该完全启动以进行网络相关操作,例如在那里执行网络命令.如果系统在DHCP上,那么远程系统如何搜索这台机器怎么办[我猜它可以通过mac地址.但如果我错了].

如果我错过了任何信息,请随时问我.如果您有任何建议可以使任务更容易,请表明他们:)

thanx imkin

perl boot operating-system uptime

8
推荐指数
3
解决办法
722
查看次数

为什么55 AA用作IBM PC上的启动签名?

为什么IBM PC体系结构55 AA引导签名的最后两个字节中使用幻数来进行引导签名

我怀疑它与它们的位模式有关:01010101 10101010但是不知道是什么.

我的猜测是:

  1. BIOS正在对这些字节一些位和/或/ XOR操作来将它们一起进行比较,如果它,例如,结果0,它可以很容易地检测和跳跃的地方.
  2. 它可能是一些平价/完整性的保障,如果其中的某些位被打破,它可以检测或东西,仍然被认为是一种有效的签名,以正确引导,即使在磁盘上这个特殊的位已经被打破或东西的系统.

也许你们中的某个人可以帮助我回答这个唠叨的问题?

我记得我曾经读过一些有关这些位模式的内容,但不记得在哪里.而且它会出现在一些纸质书中,因为我在网上找不到任何关于它的东西.

boot bootstrapping signature bootloader

8
推荐指数
1
解决办法
6935
查看次数

“CPU 执行无限跳转”是什么意思?

我正在阅读:https : //www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf 我在第 8 页阅读了以下内容:

e9 fd ff 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

*

00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa

最初的三个字节,十六进制为 0xe9、0xfd 和 0xff,实际上是 CPU 制造商定义的机器代码指令,用于执行无限跳转。

他们所说的“执行无休止的跳跃”是什么意思?

cpu boot machine-code sector

8
推荐指数
1
解决办法
970
查看次数

哪个 Linux 内核函数创建了“进程 0”?

我试图更多地了解process 0,例如,它是否具有内存描述符(非NULL task_struct->mm字段),以及它与交换或空闲进程有什么关系。在我看来,在启动 cpu 上创建了一个“进程 0”,然后为每个其他 cpu 创建了一个空闲线程idle_threads_init,但我没有找到第一个(我假设是process 0)的创建位置.

更新

根据tychen 引用的live book,这是我对process 0(x86_64)的最新理解,有人可以确认/反驳以下项目吗?

  1. 一个init_task类型化的task_struct定义是静态的,随着任务的内核堆栈init_task.stack = init_stack,内存描述符init_task.mm=NULLinit_task.active_mm=&init_mm,其中堆栈区init_stackmm_struct init_mm都静态定义。
  2. 只有active_mm非空的事实意味着process 0是一个内核进程。还有,init_task.flags=PF_KTHREAD
  3. 不长的未压缩的内核映像开始执行后,开机CPU开始使用init_stack的内核堆栈。这使得current宏有意义(自机器启动以来第一次),这使得fork()可能。在这一点之后,内核实际上运行 inprocess 0的上下文。
  4. start_kernel-> arch_call_rest_init-> rest_init,在这个函数内部,process 1&2是分叉的。在kernel_init为 调度的函数中,为每个其他逻辑 CPU 创建process …

c boot x86 assembly linux-kernel

8
推荐指数
1
解决办法
425
查看次数

启动后的寄存器状态

我正在使用x86机器上的引导加载程序.

当BIOS将MBR的内容复制到0x7c00并跳转到该地址时,寄存器的内容是否有标准含义?寄存器是否有标准值?

我知道段寄存器通常设置为0,但有时会为0x7c0.其他硬件寄存器怎么样?

boot bios

7
推荐指数
1
解决办法
190
查看次数

什么是使用Linux内核的设备的ATAG?

我试图了解内核如何启动.我目前正在尝试将新内核移植到hTC Incredible S VIVO(s710e)设备,但我无法启动它.所以,我查看了设备的原始内核,并查看了一些文档,发现该设备使用了ATAG.现在,我有几个问题,我找不到明确的答案:

  • 什么是ATAG?
  • 它们用于什么?
  • 内核如何使用ATAG启动?
  • ATAG在启动内核时起着至关重要的作用吗?

boot arm linux-kernel embedded-linux

7
推荐指数
1
解决办法
8104
查看次数

引导arch时出现nouveau错误

我用窗口8.1双启动了arch linux.安装后,第一次启动时,发生此错误.

Here is the error I found.
{ [0.063411] Ignoring BGRT: Invalid status 0 (expected 1)
starting version 218
Arch_Linux: clean, 70622/18677760 files, 1643393/74703025 blocks
[    15.759913] nouveau E[  PIBUST][0000:01:00.0] HUBO: 0xffffffff (0x1a
[    15.759952] nouveau E[  PIBUST][0000:01:00.0] GPCO: 0x00000001 (0x1a
[    15.823494] nouveau E[    PBUS][0000:01:00.0] MMIO: 0x00000000 FAULT a
[    15.824050] nouveau E[     DRM]Pointer to TMDS table invalid
[    15.824072] nouveau E[     DRM]Pointer to flat panel table invalid}
Run Code Online (Sandbox Code Playgroud)

graphics boot window bios archlinux

7
推荐指数
1
解决办法
5686
查看次数

CS寄存器在启动时的值是多少?

我是汇编语言的绿手.这些天我用bochs来模拟虚拟软盘的启动过程.但我不知道的一件事CS是系统初始化时寄存器值是什么.

;;  init registers

org 0x7c00

BaseOfStack equ 0x7c00

Label_Start:

mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, BaseOfStack

;; clear screen

mov ax, 0600h
mov bx, 0700h
mov cx, 0
mov dx, 0184h
int 10h
Run Code Online (Sandbox Code Playgroud)

上面的代码只是其中的一部分.ORG执行命令时,指令的CS寄存器值是多少mov ax, cs.它与0x7c00相同吗?谢谢.

下面是bochsrc配置:

romimage: file="$BXSHARE/BIOS-bochs-latest"
vgaromimage: file="$BXSHARE/VGABIOS-lgpl-latest"
boot: floppy
floppy_bootsig_check: disabled=0
floppya: type=1_44, 1_44="myboot.img", status=inserted
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=15
cpu: ips=15000000
log: bochsout.txt
mouse: enabled=0 …
Run Code Online (Sandbox Code Playgroud)

boot assembly bios bochs x86-16

7
推荐指数
1
解决办法
79
查看次数