PopMetal和PX2上運行upstream linux kernel代碼

Rockchip的平臺,以其強大的性能和豐富的功能,在開源社區大受歡迎,Linux內核對其提供愈來愈豐富的支持。linux

    Linux內核目前發佈的最新穩定版本是Linux 4.2,Linux 4.3的合併窗口已經打開,大概下週會發布rc1版本,最終的穩定版本git

會在一兩個月內發佈。在Linux內核的每個版本中,都會合並國內外大量Linux kernel hacker們爲Rockchip平臺提交的代碼,使得github

upstream對Rockchip平臺的支持愈來愈完善。工具

    Chipspark打造的兩款開發板PX2和PopMetal,以其豐富的接口和強大的性能,受到了國內外創客的普遍青睞,在Linux 4.1版本中,性能

日本的大牛FUKAUMI Naoki就提交了對PX2的支持代碼。同時,PopMetal也在Linux 4.2中獲得了支持,成爲upstream默認支持的一款開發板。學習

    對於Linux愛好者來講,能時刻follow upstream的最新代碼,是一件很酷的事情,不只能體會到本身hack的樂趣,還能時刻體驗Linux的最新spa

特性,不管是對本身的學習仍是對新產品的開發 ,都會提供很大的幫助。命令行

    下面主要講一下,如何編譯upstream的最新代碼,並使他運行在PopMetal和PX2開發板上。debug

   (1)首先如今代碼,在這裏咱們下載linux-stable分之的代碼。orm

        git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

        下載完成後,咱們切到最新的穩定分支linux-4.2.y,固然其餘分支也能夠。

        git checkout -b linux-4.2.y origin/linux-4.2.y 

   (2)配置,Linux upstream目前對ARM的配置採用multi platform的方式,即全部的ARM平臺(不管是Rockchip仍是Samsung exynos、TI omap),

        他們共用同  一個配置文件,對於ARM Cortex 系列 32位的芯片來講,這個配置文件是multi_v7_defconfig

         export ARCH=arm

        export CROSS_COMPILE=arm-linux-gnueabi-

        make  multi_v7_defconfig

       爲了可以正常的適用debug 串口的功能,咱們還在配置(make menuconfig)裏面作以下修改:

        make menuconfig

           

        該配置主要是在cmdline裏面指定debug的console爲ttyS2,而且開啓earlyprintk功能:console=ttyS2,115200 earlyprintk

        另外,爲了可以順利進入命令行, 咱們這裏採用最簡單的initramfs文件系統,initramfs文件系統的製做方法很簡單,想本身

        實踐的同窗能夠去網上查找相關資料,這裏直接能夠從github上下載我製做好的initramfs:

        git clone https://github.com/andyshrk/AndyHack.git

        克隆下來的rootfs目錄便是我製做的簡易initramfs,而後在make menuconfig裏面作以下配置:

           

        這裏須要填寫的是initramfs目錄在本地的相對路徑,請根據本身的實際狀況填寫。

        PopMetal上使用的PMU是RK808,multi_v7_defconfig默認沒有打開RK808的配置,在這裏咱們須要本身配置上去,不然emmc會

        工做異常:

        首先要選上Rockchip RK3xxx I2C adapter

            

        選上RK808的MFD配置

            

        選上RK808 regulator配置:

            

        另外,你們手上的開發板裏面應該默認都燒寫了Android系統,這樣Uboo在啓動的時候,會自動把Android的根文件系統boot.img

      加載到內存中,爲了不內核自動加載Android的根文件系統(由於upstream的kernel默認配置有不少是和Android 不匹配的,加載會失敗

      致使內核崩潰),須要對內核代碼作以下修改:

           

   (3)編譯代碼,這個PopMetal和PX2 有一些差異,主要是由於PopMetal的uboot支持標準的dtb功能,而PX2的uboot不支持該功能

        因此對於PX2來講,須要把dtb文件和內核編譯在一塊兒,而PopMetal確實編譯生成獨立的kernel.img和resource.img

       make zImage -j8

       make dtbs

       對於PopMetal,執行以下命令:

       ./resource_tool  arch/arm/boot/dts/rk3288-popmetal.dtb

       ./mkkrnlimg arch/arm/boot/zImage kernel.img

        對於PX2,執行以下命令:

        cat arch/arm/boot/zImage arch/arm/boot/dts/rk3066a-rayeager.dtb > dkernel

        ./mkkrnlimg dkernel kernel.img

      其中resource_tool和mkkrnling是Rockchip平臺上生成resource.img和kernel.img的工具,能夠直接從chipspark提供的內核代碼裏面拷貝

      燒寫生成的kernel.img和resource.img(對於PX2,只須要燒寫kernel.img) ,系統就能啓動到命令行狀態。


      另外,若是對Android的boot.img裏面的init.xxx.rc腳本作少許的修改,也能夠用upstream的內核把Android的基本系統跑起來,這個後面再寫。

相關文章
相關標籤/搜索