qemu 应该可以直接当 bootloader 用吧? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
linux40
V2EX    Linux

qemu 应该可以直接当 bootloader 用吧?

  •  
  •   linux40 Nov 18, 2016 4382 views
    This topic created in 3447 days ago, the information mentioned may be changed or developed.

    我抄了 nongnu.askapache.com/grub/phcoder/multiboot.pdf 里面的 kernel ,然后:

    i686-elf-gcc -c boot.S -march=i386 i686-elf-gcc -c kernel.c -march=i386 i686-elf-gcc boot.o kernel.o -o kernel -march=i386 -nostartfiles -nodefaultlibs qemu-system-i386 kernel 

    结果报错说:

    WARNING: Image format was not specified for 'kernel' and probing guessed raw. Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. Specify the 'raw' format explicitly to remove the restrictions. 

    是 pdf 里面的代码有什么问题吗,链接顺序错了,还是 qemu 不能当 bootloader ?

    Supplement 1    Nov 19, 2016
    -Wl,-N -Wl,-Ttext -Wl,80100000 -Wl,--build-id=none
    上面这个链接器的选项是什么意思啊,不加的话 qemu 认为无效。
    我新的编译选项是-fno-builtin -nostdinc -O -g -Wall
    链接选项是-nostdlib -Wl,-N -Wl,-Ttext -Wl,80100000 -Wl,--build-id=none
    而且,就算 qemu 识别成功了,但运行起来有问题, qemu 卡在 Booting for ROM 不动,而且一直运行中,可能无限循环了。。。
    9 replies    2016-11-19 15:25:41 +08:00
    reus
        1
    reus  
       Nov 18, 2016
    警告信息已经说得很明白了,解决方法都给出了。
    linux40
        2
    linux40  
    OP
       Nov 18, 2016
    @reus 显示指定 raw 格式?可我这是个镜像文件啊?
    reus
        3
    reus  
       Nov 18, 2016
    @linux40 你那个只是内核文件吧?要处理成镜像文件。 qemu 不包括 bootloader ,只是模拟硬件而已。参考这个: http://wiki.osdev.org/Bare_Bones
    reus
        4
    reus  
       Nov 18, 2016   1
    @linux40 哦,不用, qemu 支持直接启动 multiboot 内核,用 qemu-system-i386 -kernel kernel
    linux40
        5
    linux40  
    OP
       Nov 18, 2016
    @reus 可以了,虽然执行起来有问题。。。
    linux40
        6
    linux40  
    OP
       Nov 18, 2016
    @reus 咦,不对,它说我机器错了或跟本不是内核或 BIOS 。。。
    linux40
        7
    linux40  
    OP
       Nov 18, 2016
    Trying to execute code outside RAM or ROM at 0x000a0000
    linux40
        8
    linux40  
    OP
       Nov 18, 2016
    呃, grub-file --is-x86-multiboot 返回错误,明天再看吧。。。
    linux40
        9
    linux40  
    OP
       Nov 19, 2016
    -Wl,-N -Wl,-Ttext -Wl,80100000 -Wl,--build-id=none
    上面这个链接器的选项是什么意思啊,不加的话 qemu 认为无效。
    我新的编译选项是-fno-builtin -nostdinc -O -g -Wall
    链接选项是-nostdlib -Wl,-N -Wl,-Ttext -Wl,80100000 -Wl,--build-id=none
    而且,就算 qemu 识别成功了,但运行起来有问题, qemu 卡在 Booting for ROM 不动,而且一直运行中,可能无限循环了。。。
    About     Help     Advertise     Blog     API     FAQ     Solana     5076 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 09:47 PVG 17:47 LAX 02:47 JFK 05:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86