• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            string

            string
            posts - 27, comments - 177, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            UEFI實(shí)戰(zhàn)(1)

            Posted on 2011-10-02 01:46 djx_zh 閱讀(18723) 評(píng)論(16)  編輯 收藏 引用
            本篇為UEFI實(shí)戰(zhàn)系列第一部分。
            UEFI實(shí)戰(zhàn)前10個(gè)部分計(jì)劃如下:
            UEFI 實(shí)戰(zhàn)(1) 開(kāi)發(fā)環(huán)境 
            講述如何配置開(kāi)發(fā)環(huán)境。
            UEFI 實(shí)戰(zhàn)(2)  HelloWorld
            講述dsc, inf文件的格式, application常用的變量,數(shù)據(jù)結(jié)構(gòu)和函數(shù)。
            UEFI 實(shí)戰(zhàn)(3) C++
            講述如何用C++開(kāi)發(fā)UEFI程序。
            UEFI 實(shí)戰(zhàn)(4) protocol
            講述UEFI中protocol的概念
            UEFI實(shí)戰(zhàn)(5) driver
            講述UEFI中driver模型
            UEFI實(shí)戰(zhàn)(6) 文件讀寫(xiě)
            UEFI實(shí)戰(zhàn)(7) Hii interface 之 Form
            UEFI實(shí)戰(zhàn)(8) Hii interface 之 String 和Font
            UEFI實(shí)戰(zhàn)(9) GUI
            UEFI實(shí)戰(zhàn)(10) Network

            UEFI 實(shí)戰(zhàn)(1)
            配置開(kāi)發(fā)環(huán)境
            1. 下載 Windows SDK
            2. 下載EDK2 
            3. 打開(kāi)visual studio 2008 command prompt 
                cd EDK2
                edksetup.bat
            4. 編輯Conf\taget.txt, 修改 編譯工具TOOL_CHAIN_TAG        為
               TOOL_CHAIN_TAG        = VS2008x86
            5. build
                build命令有兩個(gè)參數(shù), -a 和-p, -a 用來(lái)選擇平臺(tái)(IA32 X64,...) -p用來(lái)選擇要編譯的package,默認(rèn)的package是Nt32Pkg, 所以build命令與 build -a IA32 -p Nt32Pkg\Nt32Pkg.dsc 等同,用來(lái)編譯UEFI模擬器。
            6. build run
                與build -a IA32 -p Nt32Pkg\Nt32Pkg.dsc run 命令等同,用來(lái)運(yùn)行UEFI模擬器。
             
            制作UEFI USB啟動(dòng)盤(pán)
            分兩種情況,如果目標(biāo)平臺(tái)是UEFI平臺(tái),按如下步驟來(lái)做:
            1。 格式化U盤(pán)為FAT(FAT,FAT16, FAT32)格式 
            2。 在U盤(pán)上建立目錄 efi\boot
            3。 將efi的應(yīng)用程序 copy到 efi\boot 目錄,并改名為bootx64.efi 或者bootia32.efi。
                  因?yàn)閁EFI的啟動(dòng)文件是FAT盤(pán)內(nèi)efi\boot目錄里的bootx64.efi 或bootia32.efi, 與legacy bios需要MBR來(lái)引導(dǎo)OS不同。
            如果目標(biāo)平臺(tái)是legacy bios, 需要在U盤(pán)中制作MBR和引導(dǎo)文件, 按如下步驟來(lái)做:
            1。 編譯duet package
                  build -a IA32 -p DuetPkg\DuetPkgIa32.dsc 或者
                  build -a X64 -p DuetPkg\DuetPkgX64.dsc
            2。 生成引導(dǎo)文件
                  cd DuetPkg
                  postbuild.bat Ia32 或者 postbuild.bat X64
            3。 插入U(xiǎn)盤(pán),假設(shè)J:是U盤(pán), 向U盤(pán)寫(xiě)入MBR
                  createbootdisk usb J: FAT32 IA32 或者 createbootdisk usb J: FAT32 X64     
            4。拔出并重新插入U(xiǎn)盤(pán), 向U盤(pán)copy UEFI文件
                  createbootdisk usb J: FAT32 IA32 step2 或者 createbootdisk usb J: FAT32 X64 step2
                  此命令向U盤(pán)根目錄copy了efildr20, 該文件用于引導(dǎo)系統(tǒng)進(jìn)入U(xiǎn)EFI環(huán)境,并向efi\boot目錄copy了引導(dǎo)文件bootia32.efi或bootx64.efi
            接下來(lái)就可以用U盤(pán)來(lái)運(yùn)行UEFI了。
             
            如何Debug
            UEFI有兩種debug方式,一是在模擬環(huán)境Nt32Pkg下debug,另一種是通過(guò)串口調(diào)試真實(shí)環(huán)境中的UEFI程序。我從來(lái)沒(méi)見(jiàn)過(guò)傳說(shuō)中的利用串口調(diào)試,所以下面只能說(shuō)說(shuō)Nt32Pkg下的debug。
            在需要調(diào)試的代碼前面加入_asm int 3; 編譯,然后再模擬環(huán)境中(Nt32Pkg)中運(yùn)行該程序,當(dāng)模擬器執(zhí)行到int 3;指令時(shí),會(huì)彈出對(duì)話框,然后就可以調(diào)試了。

            Feedback

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2011-12-05 14:15 by 王子
            您好,看到你寫(xiě)UEFI,知道你是這方面的專家,我這里有個(gè)問(wèn)題需要請(qǐng)教 :怎么得到GPT分區(qū)表? 怎么讀寫(xiě)里面的數(shù)據(jù)? 能用vs實(shí)現(xiàn)嗎?

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2011-12-06 00:00 by djx_zh
            UEFI會(huì)為每一個(gè)分區(qū)創(chuàng)建一個(gè)controller, 也會(huì)為每個(gè)硬盤(pán)創(chuàng)建一個(gè)controller. 通過(guò)安裝到controller上的DiskIo protocol可以讀寫(xiě)每一個(gè)扇區(qū)。
            每個(gè)controller上有DevicePath protocol, 你可以通過(guò)DevicePath判斷該controller是一個(gè)扇區(qū),還是一個(gè)硬盤(pán)。扇區(qū)的DevicePath的的最后一個(gè)有效Node是HD(SPEC 9.3.6.1)。
            當(dāng)你獲得了GPT硬盤(pán)的DiskIo之后,可以利用DiskIo讀第一個(gè)扇區(qū)(第0個(gè)是MBR或者Protective MBR)得到GPT header,第2~33分區(qū)存放的是EFI_PARTITION_ENTRY。 GPT用到的數(shù)據(jù)結(jié)構(gòu)在MdePkg/Include/Uefi/UefiGpt.h中,GPT的格式可以參考UEFI SPEC 第5章。
            可以用VS實(shí)現(xiàn)。

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2012-03-09 14:54 by ningle
            very very good,希望博主能把2、5、7、9、10部分也一同貼上來(lái),特別第2,5部分,因?yàn)槲覜](méi)有入門(mén)了,這方面的中文資料太少了,難得遇到博主這么精通的

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2012-03-12 07:20 by djx_zh
            @ningle
            謝謝關(guān)注。這幾部分還沒(méi)寫(xiě),我盡快寫(xiě)吧。如果看到寫(xiě)的有不準(zhǔn)確的地方,也請(qǐng)告訴我啊。

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2012-10-04 15:05 by zboydong
            博主能不能寫(xiě)一篇關(guān)于duet的

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2013-01-24 08:00 by howard
            Hi 博主,你的文章讓我受益匪淺!我按照你的流程做UEFI 的USB啟動(dòng)盤(pán),現(xiàn)在boot 成功了,可是發(fā)現(xiàn)shell 少了一些commands, 比如devices.之前我在OS上直接build run就可以看到那些指令,這是為什么?請(qǐng)博主指點(diǎn)!

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2013-01-24 09:24 by howard
            補(bǔ)充下,我的目標(biāo)平臺(tái)是legacy bios

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2013-01-24 22:15 by djxzh
            @howard
            你用的是EDK2預(yù)先編譯好的shell,這個(gè)shell比較老。 你可以自己編譯ShellPKg,然后用shell.efi 覆蓋掉U盤(pán)上的bootx64.efi

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2013-01-25 06:23 by howard
            贊! 現(xiàn)在可以了。可是UEFI找不到設(shè)備,只能看到這個(gè)USB盤(pán),其他attached的drives 和Pcie device 都看不到,是device驅(qū)動(dòng)不對(duì)嗎?

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2013-01-25 22:36 by djxzh
            @howard
            不知你想找什么設(shè)備呢? EDK2 只提供了有限的幾種device driver, 部分網(wǎng)卡的driver可以到intel網(wǎng)站上下載。

            # re: UEFI實(shí)戰(zhàn)(1)[未登錄](méi)  回復(fù)  更多評(píng)論   

            2013-11-12 15:15 by Jerry
            樓主是這方面的專家,我想問(wèn)一下樓主,GPT磁盤(pán)中有MBR中所謂的活動(dòng)分區(qū)概念嗎,GPT磁盤(pán)的系統(tǒng)啟動(dòng)和MBR磁盤(pán)的啟動(dòng)有什么區(qū)別嗎,GPT不是尋找活動(dòng)分區(qū)來(lái)啟動(dòng)操作系統(tǒng)嗎?謝謝樓主!

            # re: UEFI實(shí)戰(zhàn)(1)[未登錄](méi)  回復(fù)  更多評(píng)論   

            2013-11-17 23:12 by djx_zh
            @Jerry
            UEFI 完成硬件初始化后,會(huì)遍歷GPT硬盤(pán)中的FAT分區(qū),從FAT分區(qū)找到efi/boot/bootia32.efi 或efi/boot/bootx64.efi, 操作系統(tǒng)的啟動(dòng)由bootx64.efi或bootia32.efi完成。
            MBR硬盤(pán)啟動(dòng)代碼以二進(jìn)制形式放在活動(dòng)分區(qū)指定的地方。GPT硬盤(pán)的啟動(dòng)代碼是完整的應(yīng)用程序,存放在啟動(dòng)分區(qū)即FAT分區(qū)的efi/boot目錄下

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2015-10-21 13:44 by 馬天橫
            我通過(guò) build -a X64 -p Nt32Pkg\Nt32Pkg.dsc 命令創(chuàng)建但是出錯(cuò)了!錯(cuò)誤信息是:MSVCRTD.lib(crtexe.obj):error LNK2001:無(wú)法解析的外部符號(hào)__imp_EncodePointer

            # re: UEFI實(shí)戰(zhàn)(1)[未登錄](méi)  回復(fù)  更多評(píng)論   

            2015-10-21 21:59 by djx_zh
            @馬天橫
            Nt32Pkg只支持-a IA32

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2015-12-21 12:20 by daisy
            為什么我build x64就成功了~build -p NT32Pkg\NT32Pkg.dsc -a X64

            # re: UEFI實(shí)戰(zhàn)(1)  回復(fù)  更多評(píng)論   

            2016-03-19 17:59 by yayake
            我運(yùn)行 build命令沒(méi)報(bào)錯(cuò),可運(yùn)行 build -a X64 -p Nt32Pkg\Nt32Pkg.dsc 命令時(shí),出現(xiàn)了兩個(gè)uefi模擬器的窗口,而且shell階段打印了大量的亂碼,之后直接卡死了, 我用的edk版本是“UDK2015.Complete.MyWorkSpace”。

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            一本色道久久综合狠狠躁| 99久久精品免费| 久久久久久亚洲精品无码| 综合久久国产九一剧情麻豆| 国产亚洲色婷婷久久99精品91| 国产∨亚洲V天堂无码久久久| 久久精品一本到99热免费| 人妻无码精品久久亚瑟影视| 国产精品免费久久久久影院| 青青青青久久精品国产| 亚洲国产精品人久久| 亚洲国产精久久久久久久| 91亚洲国产成人久久精品网址| 99久久精品九九亚洲精品| 狠狠综合久久综合中文88| 久久99精品久久久久久齐齐| 久久精品国产99国产精品| 午夜精品久久影院蜜桃| 国产成人精品综合久久久| 久久久免费精品re6| 久久九九青青国产精品| 久久se这里只有精品| 亚洲欧美日韩精品久久亚洲区 | 天天做夜夜做久久做狠狠| 久久精品国产只有精品66 | 久久综合亚洲鲁鲁五月天| 精品综合久久久久久98| 91精品国产9l久久久久| 久久99精品久久久久久水蜜桃| 久久免费99精品国产自在现线| 久久婷婷五月综合色奶水99啪 | 伊人色综合久久| 久久综合久久美利坚合众国 | 久久精品国产影库免费看| 欧美色综合久久久久久| 久久精品国产第一区二区三区| 久久综合久久综合九色| 久久人人爽人人爽人人片AV高清 | 一级a性色生活片久久无 | 国产精品视频久久久| 免费精品久久天干天干|