Articles of 启动

准备加载内核

尽pipe有很多完整的引导装载机可供使用,但我在业余时间一直在写一个关于教育的练习。 我遇到了一个问题。 我能够执行一个初始引导和连锁加载其他部门没有问题。 如果我正在编写自己的操作系统,我很乐意去。 :)相反,我试图引导Linux。 我遇到的挑战是双重的。 我知道我需要将内核(Linux)加载到0x100000的内存中 。 我知道我应该在内核的偏移0x202处find“HdrS”签名。 我也知道,起始地址应该在0x214。 但是,当我跳转到该地点的地址它停止。 很显然,围绕这一点很难包装一个debugging器。 🙂 我是否需要确定内核的正确起始地址的这一连串事实中缺less一些东西? 我怀疑(1)的答案可能是需要用硬件发现信息填充一些内存区域。 我已经在OSDev Wiki上看到了几个关于这个的传递引用,但是我似乎错过了它的位置,并且确切地说哪些数据需要在那里。 引导加载程序是否负责硬件发现? 如果是这样,哪些数据需要放在哪里? 另外需要注意的是,我已经处于32位保护模式,因为我正在处理创buildEFI引导系统,所以16位实模式在这里不是真正的select,从而消除了实模式启动位置核心。

我无法启动我最新的rpi-3.18.0内核并启用设备树?

我正在研究最新的rpi内核,例如3.18.0,并启用设备树。 我编译的源代码,并与我无法启动的图像和模块。 我得到一个空白的屏幕,不启动。 即使我无法启动,我在config.txt中添加了以下内容 device_tree=bcm2708-rpi-b.dtb device_tree_address=0x100 kernel_address=0x8000 disable_commandline_tags=2 但是在链接https://github.com/raspberrypi/firmware/tree/next中给出的图像和模块,使用相同的config.txt文件 我也使用从链接https://github.com/raspberrypi/firmware/tree/next的固件

将Linux引导选项传递给Init

我想通过引导程序在引导时configuration的引导选项将一些parameter passing给定制的Linux init。 我已经在Python和C中编写了testinginit。Python版本能够在内核启动选项中看到没有“=”或“。”的任何内容。 在里面。 这些值在sys.argv中find。 但是,C程序似乎没有通过值。 我原以为Python中的sys.argv列表是通过parsing** argv数组生成的。 下面是testing脚本和屏幕截图,希望有助于澄清。 内核引导线是: kernel /grub/linux-2.6.38.4 root=/dev/vda1 init=/argv-{p|c} one two three four five Python版本: #!/usr/bin/python import sys i = 0 print("Printing argv[] (Python) …") for each in range(i, len(sys.argv)): print("argv[%d] – %s" % (i, sys.argv[i])) i += 1 print("…finished printing argv[]") C版本: #include <stdio.h> int main(int argc, char […]

如何在Linux中自动启动需要X的应用程序

我试图在系统进入运行级别5时自动启动X应用程序。 什么是正确的方法来做到这一点? 我写了一个脚本,并把它放在/etc/init.d/ 我已经运行了相应的chkconfig命令来设置/etc/rcX.d目录中的符号链接。 一切正常,除了脚本无法启动X应用程序时,我运行: /sbin/service scriptName start 这条线看起来像这样(为了争辩,我已经在xclock切换): 'start') xclock 我得到以下错误: Error: Can't open display: 经过一番研究,似乎/ sbin / service从一个典型的shell中删除了大部分的环境variables。 通过添加DISPLAY: 'start') DISPLAY=:0 export DISPLAY xclock 我得到: Error: Can't open display: :0 我修改了我的脚本,包括: 'start') DISPLAY=:0 export DISPLAY XAUTHORITY=/root/.xauth2w90ge export XAUTHORITY xclock 现在,它的工作原理 – 但是这显然是一个黑客,因为.xauth2w90ge文件生成,并不会从实例到实例相同。 那么是否有适当的方法来做到这一点,或者我吠叫错了树? 我的要求是让这个应用程序自动启动机器,我受到任何命令和权限的限制,我可以在RPM安装脚本中运行。

我怎样才能在每次启动时运行我自己的脚本

我有一个问题,我怎么能在Ubuntu的每个启动时间运行我自己的bash脚本。 假设我有一个正在做某种特定工作的脚本。 现在我想让它在启动我的Ubuntu系统的时候自动运行。

是否有可能closuresLinux内核,并在实模式下恢复?

比方说,我想在我的普通操作系统启动之前启动一个小型的Linux发行版。 BIOS加载MBR并执行MBR。 MBR位于我的Linux分区的活动分区。 Linux启动,我执行我需要做的事情。 Linuxclosures,我再次切换到实模式。 原来的分区引导扇区被加载,我的普通操作系统启动。 AFAIK,第4步将是困难的任务,在Linux之前恢复所有设备上的状态,将INT13hfunction? 我是否需要恢复中断向量表? 提几个。 这是否已经在任何现有的项目中完成?

在XServer启动后运行shell脚本?

如何在XServer启动时运行shell脚本,也可以运行lightdm。 我在/ etc目录下尝试了init.d和rc.local,但是我的脚本正在调用gui应用程序,所以我需要在XServer启动后运行它。 我正在使用Debian Jessie。

initrd和引导Linux内核

据我所知,initrd是一个可载入RAM的小图片。 它用来启动所有可加载模块的完整内核。 作为该过程的一部分,我们需要vmlinuz内核映像,它是bzImage的重命名版本。 是否有可能在不创buildinitrd镜像的情况下启动内核?

ARM Linux引导的一些细节

我想了解在arm架构上启动linux的细节。 我在互联网上search了大量的东西,并了解了一些细节,尽pipe我觉得每次读一篇文章都会带来很多其他的新词汇,这会让事情变得更加复杂。 我有2个运行Linux的板,一个olimex 9261和一个beaglebone黑色。 我在embedded式系统(尤其是ARM)方面的专业知识相当不错,但是并没有在Linux上玩得太多(除了一些用户空间程序和内核中的字符驱动程序)。 这是我的问题: 一个主板我有以下的uboot输出(Linux 2.6.30): bootargs=mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2 bootcmd= cp.b 0xC0042000 0x22000000 0x00199954; bootm 0x22000000 该板有64MB RAM(映射在0x20000000),512MB NAND闪存(目前没有find映射)和2MB数据闪存(映射在0xc0000000)。 这里我不明白: 为什么bootargs中有一个mem = 64? 这不是应该给ATAG或DTB吗? 为什么当我们将控制权交给内核时,有一个控制台作为参数给出? 内核是否使用已由ubootconfiguration的tty? initrd vs rootfs。 这仍然不清楚。 我知道initrd可以被包含在内核中作为一个块设备或一个单独的映像,uboot必须将地址细节传递给内核(true?)。 我们可以拥有一个没有包含initrd的内核+另一个文件系统,就像这个jffs2,内核将运行其他的驱动程序? 实际上,我无法理解引导时内核使用的文件系统的全部细节。 在这个设置中,我有4个文件:uImage,bootstrap,env.bin和jffs2文件系统。 所以没有initrd。 这是如何工作的? 在上面的bootargs中指定文件系统的过程如何? 在我的理解中,内核应该先访问jffs2文件系统,然后抓取/ dev / mtdblock1中的映像并挂载它。 也许我的理解是错误的。 其实内核和文件系统之间的这种交互是我似乎不了解的。 在上面的bootcmd中,内核从nand复制到sdram,然后bootm跳转到它。 但是内核在启动时如何findjffs呢? 我在启动过程中看到这个输出行:VFS:在设备31:1上挂载的根(jffs2文件系统)。 在板子用户指南我发现这个: 警告:由于AT91SAM9261芯片的勘误不支持从NAND闪存启动。 … 512MB NAND […]

可启动的Qt-Linux应用程序

如何启动一个Linux内核+依赖和自动运行一个Qt应用程序,所以Linux环境不显示(只有Qt GUI是可见的)? 在x86电脑上 应该可以从RAM运行(当然)