新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > zImage內核鏡像解壓過程詳解

        zImage內核鏡像解壓過程詳解

        作者: 時間:2012-08-27 來源:網絡 收藏

        int arch_id)

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

        l free_mem_ptr_p:函數需要的內存緩沖開始地址;

        l ulg free_mem_ptr_end_p:解壓函數需要的內存緩沖結束地址,共64K;

        l arch_id :architecture ID,對于SMDK2410這個值為193;

        最后回答第3個問題

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

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

        Piggy.o是由piggy.S生成的,咱們看看piggy.S的內容:

        .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函數吧,它將調用gunzip()解壓。gunzip()在lib/inflate.c中定義,它將調用NEXTBYTE(),進而調用get_byte()來獲取壓縮代碼。

        在misc.c中

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

        查看fill_inbuf函數

        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];

        }

        發現什么沒?這里的input_data不正是piggy.S里的input_data嗎?這個時候應該明白內核是怎樣確定piggy.gz在中的位置了吧。

        時間關系,可能敘述的不夠詳細,大家可以集合內核代碼和網上的其它相關文章,理解啟動解壓


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 马边| 龙游县| 陵水| 广水市| 江孜县| 潞西市| 双牌县| 杭州市| 江川县| 上蔡县| 察隅县| 临西县| 瑞安市| 巴马| 西乌珠穆沁旗| 方城县| 南岸区| 德庆县| 开阳县| 金川县| 西昌市| 会东县| 红安县| 青阳县| 紫云| 万州区| 山阴县| 肃宁县| 勐海县| 舟山市| 合水县| 遂平县| 涞源县| 清远市| 阿克| 五大连池市| 肥乡县| 望江县| 庆阳市| 托克逊县| 襄樊市|