2007-07-01 11:06:00 fishinthewind 阅读数 4164
  • Windows启动进阶

    本课程是Windows启动入门课程后续,将会讲解两大话题: 一个是如何制作VHD以及差分VHD的启动盘。利用VHD以及差分VHD,我们备份和还原Windows系统就很简单了,不再需要Ghost。 另外一个话题是如何升级Bootmgr,而不需要升级操作系统。这样我们就可以体验Windows10启动器的风采,却又不需要换用新的操作系统。

    1487 人正在学习 去看看 孙宇彤

  问

VM中启动操作系统时出现“Failed to launch peer process”的错误,如下图:

 

解决

可能的原因是,内存中已经存在着VM的程序,但不占用CPU资源。这时需要注销或重新启动电脑,刷新内存后再启动VM即可。
2019-04-07 17:42:54 doujinlong1 阅读数 120
  • Windows启动进阶

    本课程是Windows启动入门课程后续,将会讲解两大话题: 一个是如何制作VHD以及差分VHD的启动盘。利用VHD以及差分VHD,我们备份和还原Windows系统就很简单了,不再需要Ghost。 另外一个话题是如何升级Bootmgr,而不需要升级操作系统。这样我们就可以体验Windows10启动器的风采,却又不需要换用新的操作系统。

    1487 人正在学习 去看看 孙宇彤

操作系统是怎么启动的?

首先,计算机启动时会先加载bios(基本io系统),完成后加载BootLoader(硬盘第一个扇区,512字节,0fc00),然后由BootLoader来加载os。然后os就可以在内存中

2012-11-22 19:03:33 sweetsoft 阅读数 30143
  • Windows启动进阶

    本课程是Windows启动入门课程后续,将会讲解两大话题: 一个是如何制作VHD以及差分VHD的启动盘。利用VHD以及差分VHD,我们备份和还原Windows系统就很简单了,不再需要Ghost。 另外一个话题是如何升级Bootmgr,而不需要升级操作系统。这样我们就可以体验Windows10启动器的风采,却又不需要换用新的操作系统。

    1487 人正在学习 去看看 孙宇彤

安装完windows8 后开始安装sql2012,安装过程中停在“正在启动操作系统功能"NetFx3"”不动了,很是着急,于是上网查了一下资料,原来NetFx3指的是Framework3.5,

于是从微软官方下载了framework 3.5,安装完后,继续按照sql2012,顺利通过。

2012-05-10 09:12:36 bbs598598 阅读数 844
  • Windows启动进阶

    本课程是Windows启动入门课程后续,将会讲解两大话题: 一个是如何制作VHD以及差分VHD的启动盘。利用VHD以及差分VHD,我们备份和还原Windows系统就很简单了,不再需要Ghost。 另外一个话题是如何升级Bootmgr,而不需要升级操作系统。这样我们就可以体验Windows10启动器的风采,却又不需要换用新的操作系统。

    1487 人正在学习 去看看 孙宇彤
用于启动操作系统的Bootloader,一般都需要将内核“搬移”到SDRAM中去运行,然而在逻辑系统下,
程序直接烧写到片内FLASH(应该是NorFlash吧)执行,不需要做什么搬移。

我有这样两个想法,请您指教:

1、之所以要“搬移”到SDRAM中运行,主要是因为NorFlash的价格和单片Flash的存储空间与NandFlash相比,
  劣势明显,一般都是使用NandFlash存储系统内核。然而,NandFlash不能够随机读写,只能按页读写,无法
  运行内核。这是想法(1),不知是否如此,请高手指点迷津...........

2、如果我的内核编译以后足够小,或者是我的片内Flash(比如单片机用于存储程序的闪存)足够大,使得我的内核
  可以放在这个片内Flash里面。这个时候我的bootloader是否就可以像单片机裸机程序上的“启动代码”那样,只做

  一些简单的系统初始化工作,之后跳转到内核需要执行的第一个C函数,内核开始运行。这是想法(2),请高手指点



引用 1 楼 flag_002 的回复:
看得有点糊涂,你是想直接从FLASH启动,不跳转内存吗,在FLASH中只做简单初始化,让系统跑起来,是这个意思吗?

注意启动映像不只是要让系统跑起来,更重要的是加载系统映像!


首先,非常感谢你的回复。
我说“系统跑起来”的意思就是“操作系统开始进行任务的调度”,也就是说操作系统的内核开始运行。你所说的这个“加载映像”本质应该还是属于代码的“搬移”吧,就是把他从永久性存储设备中“加载”(搬移)到SDRAM中。对吗?还是通过某种接口把“映像”装入这些永久性存储设备?

帖子目的主要是想探讨:操作系统的Bootloader和一般的裸机程序的“启动代码”有什么共性和区别,因为初学Bootloader和操作系统相关的东西,对很多东西比较陌生,想通过与熟悉的事物类比的方法加深一下认识。

我的理解是:前面所说的两点。

Bootloader之所以要“搬运”代码,是不是跟芯片本身的启动过程有关(除了上述两点之外)。
低端的单片机程序直接在片上Flash里面逐条向下执行,但是像ARM7和ARM9架构的芯片,片上
Flash很小,甚至干脆就没有,这类芯片的启动机制一般就是从Flash“加载”到SDRAM,然后
在SDRAM中运行程序。

是不是正是因为芯片的这种启动过程使得Bootloader的做法如此,Bootloaer实质上是根据芯片
的启动流程具体而定的。


你的想法基本上是对的,可以让操作系统在flash中跑,链接操作系统的时候应该注意把data区和bss区还有sp都要指向ram空间。还有操作系统在flash中跑会慢很多

非常感谢您的指点,经过了解总结Bootloader代码“搬运”的主要原因如下:

1、内核运行速度的要求。NorFlash虽然有随机存取的能力但是速度毕竟无法与SDRAM相比。
2、主流芯片的启动流程。对于ARM7和ARM9架构的芯片片内Flash很小或者干脆没有,上电后程序是在片外NorFlash或者SDRAM中运行。
3、NorFlash不仅相对SDRAM速度慢,而且价格相对NandFlash较高,选用NandFlash加SDRAM的方案能够保证成本,也能够保证内核运行速度,用软件完成代码的“加载”即可。

楼上仁兄,所说的.bss区应该就是分配在“栈”空间中的局部变量变量了吧,data区域应该就是系统中用到的一些常数,对吗?还是data区域是分配在“静态存储区”中的全局变量?应该是后者的可能性较多一些吧,如果是常数就是只读了,应该没有必要放在RAM了吧。

有点差别,bss段是指那些未初始化的全局变量或者初始化为0的全局变量(这和具体的工具链有关),date是指那些初始化过的全局变量,常量我们一般说rodata段

data区域是分配在“静态存储区”中的全局变量,常数就是只读,没有必要放在RAM。你的想法很好,我想不出来有什么不行。你完全可以试一下。(如果你现在的系统用的NORFLASH的话)不花你很多时间。

非常感谢大家的回复!

通过交流,关于Bootloader的基本概念和最基本的使用方法已经明确!再次感谢各位。

关于GNU中“段”的定义,“#6楼”说的很对,也感谢“#7”楼的回复。先为方便有后来人清晰概念,少走曲折,
总结如下:

.text:代码段。(指令序列,一般为只读)
.rodata:只读数据段。(如同C语言中的CONST,就是常量了)
.data:有初始值的数据段。(在C语言中定义一个“全局变量”并且赋予初始值,就会存入该段)
.bss:无初始值的数据段。(没有赋初始值的“全局变量”)

那么,局部变量到底放到哪里去了哪?局部变量分配在“栈”当中,用时分配,不用时释放,不在“段”当中,“全局变量”才会放入“段”。

通过交流,问题基本明朗,非常感谢!!

.data、.bss还有.rodata,都是"段",“#6楼”说的很对,非常感谢各位!

常量放在.rodata,呵呵....





2016-01-20 14:38:33 jx13175 阅读数 523
  • Windows启动进阶

    本课程是Windows启动入门课程后续,将会讲解两大话题: 一个是如何制作VHD以及差分VHD的启动盘。利用VHD以及差分VHD,我们备份和还原Windows系统就很简单了,不再需要Ghost。 另外一个话题是如何升级Bootmgr,而不需要升级操作系统。这样我们就可以体验Windows10启动器的风采,却又不需要换用新的操作系统。

    1487 人正在学习 去看看 孙宇彤

aix 误删 /etc/inittab 后导致无法启动操作系统,

解决办法;

1. 重启动服务器后,进入单用户模式;

2. vi /etc/inittab <<<建立一个空的inittab文件。

3. 使用 mkitab 命令构建最小inittab  

那么最小化的inittab如下: 

init:2:initdefault: 
brc::sysinit:/sbin/rc.boot 3 >/dev/console 2>&1 
srcmstr:23456789:respawn:/usr/sbin/srcmstr 
rctcpip:2:wait:/etc/rc.tcpip 
cons:0123456789:respawn:/usr/sbin/getty /dev/console


mkitab "init:2:initdefault:"

mkitab -i init "brc::sysinit:/sbin/rc.boot 3 >/dev/console 2>&1 "

按照以上的顺序构建出所有最小inittab。

-- 检查一下子顺序是否正确(若不正确使用;rmitab命令移除错误条目

lsitab -a


重启服务器后,再使用mkitab参考其他正常服务器的inittab补全所有条目再次启动。搞定!






没有更多推荐了,返回首页