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的基本系统跑起来,这个后面再写。

相关文章
相关标签/搜索