<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > zImage內(nèi)核鏡像解壓過(guò)程詳解

          zImage內(nèi)核鏡像解壓過(guò)程詳解

          作者: 時(shí)間:2012-08-27 來(lái)源:網(wǎng)絡(luò) 收藏

          int arch_id)

          l output_start:指輸出的起始位置,此時(shí)它的值參考上面的圖表,緊接在緩沖區(qū)后;

          l free_mem_ptr_p:函數(shù)需要的內(nèi)存緩沖開(kāi)始地址;

          l ulg free_mem_ptr_end_p:解壓函數(shù)需要的內(nèi)存緩沖結(jié)束地址,共64K;

          l arch_id :architecture ID,對(duì)于SMDK2410這個(gè)值為193;

          最后回答第3個(gè)問(wèn)題

          首先看看piggy.o是如何生成的,在arch/arm/boot/compressed/Makefie中

          $(obj)/piggy.o: $(obj)/piggy.gz FORCE

          Piggy.o是由piggy.S生成的,咱們看看piggy.S的內(nèi)容:

          .section .piggydata,#alloc

          .globl input_data

          input_data:

          .incbin arch/arm/boot/compressed/piggy.gz

          .globl input_data_end

          input_data_end:

          再看看misc.c中decompress_kernel函數(shù)吧,它將調(diào)用gunzip()解壓。gunzip()在lib/inflate.c中定義,它將調(diào)用NEXTBYTE(),進(jìn)而調(diào)用get_byte()來(lái)獲取壓縮代碼。

          在misc.c中

          #define get_byte() (inptr insize ? inbuf[inptr++] : fill_inbuf())

          查看fill_inbuf函數(shù)

          int fill_inbuf(void)

          {

          if (insize != 0)

          error(ran out of input data);

          inbuf = input_data;

          insize = input_data_end[0] - input_data[0];

          inptr = 1;

          return inbuf[0];

          }

          發(fā)現(xiàn)什么沒(méi)?這里的input_data不正是piggy.S里的input_data嗎?這個(gè)時(shí)候應(yīng)該明白內(nèi)核是怎樣確定piggy.gz在中的位置了吧。

          時(shí)間關(guān)系,可能敘述的不夠詳細(xì),大家可以集合內(nèi)核代碼和網(wǎng)上的其它相關(guān)文章,理解啟動(dòng)解壓。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();