PopMetal和PX2上运行upstream linux kernel代码
2015-09-15 15:01
731 查看
Rockchip的平台,以其强大的性能和丰富的功能,在开源社区大受欢迎,Linux内核对其提供越来越丰富的支持。
Linux内核目前发布的最新稳定版本是Linux 4.2,Linux 4.3的合并窗口已经打开,大概下周会发布rc1版本,最终的稳定版本
会在一两个月内发布。在Linux内核的每一个版本中,都会合并国内外大量Linux kernel hacker们为Rockchip平台提交的代码,使得
upstream对Rockchip平台的支持越来越完善。
Chipspark打造的两款开发板PX2和PopMetal,以其丰富的接口和强大的性能,受到了国内外创客的广泛青睐,在Linux 4.1版本中,
日本的大牛FUKAUMI Naoki就提交了对PX2的支持代码。同时,PopMetal也在Linux 4.2中得到了支持,成为upstream默认支持的一款开发板。
对于Linux爱好者来说,能时刻follow upstream的最新代码,是一件很酷的事情,不仅能体会到自己hack的乐趣,还能时刻体验Linux的最新
特性,无论是对自己的学习还是对新产品的开发 ,都会提供很大的帮助。
下面主要讲一下,如何编译upstream的最新代码,并使他运行在PopMetal和PX2开发板上。
(1)首先现在代码,在这里我们下载linux-stable分之的代码。
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
![](https://img-blog.csdn.net/20150915145946850?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
该配置主要是在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里面做如下配置:
![](https://img-blog.csdn.net/20150915150000291?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里需要填写的是initramfs目录在本地的相对路径,请根据自己的实际情况填写。
PopMetal上使用的PMU是RK808,multi_v7_defconfig默认没有打开RK808的配置,在这里我们需要自己配置上去,否则emmc会
工作异常:
首先要选上Rockchip RK3xxx I2C adapter
![](https://img-blog.csdn.net/20150915150014190?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
选上RK808的MFD配置
![](https://img-blog.csdn.net/20150915150028695?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
选上RK808 regulator配置:
![](https://img-blog.csdn.net/20150915150049229?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
另外,大家手上的开发板里面应该默认都烧写了Android系统,这样Uboo在启动的时候,会自动把Android的根文件系统boot.img
加载到内存中,为了避免内核自动加载Android的根文件系统(因为upstream的kernel默认配置有很多是和Android 不匹配的,加载会失败
导致内核崩溃),需要对内核代码做如下修改:
![](https://img-blog.csdn.net/20150915150104905?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(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的基本系统跑起来,这个后面再写。
Linux内核目前发布的最新稳定版本是Linux 4.2,Linux 4.3的合并窗口已经打开,大概下周会发布rc1版本,最终的稳定版本
会在一两个月内发布。在Linux内核的每一个版本中,都会合并国内外大量Linux kernel hacker们为Rockchip平台提交的代码,使得
upstream对Rockchip平台的支持越来越完善。
Chipspark打造的两款开发板PX2和PopMetal,以其丰富的接口和强大的性能,受到了国内外创客的广泛青睐,在Linux 4.1版本中,
日本的大牛FUKAUMI Naoki就提交了对PX2的支持代码。同时,PopMetal也在Linux 4.2中得到了支持,成为upstream默认支持的一款开发板。
对于Linux爱好者来说,能时刻follow upstream的最新代码,是一件很酷的事情,不仅能体会到自己hack的乐趣,还能时刻体验Linux的最新
特性,无论是对自己的学习还是对新产品的开发 ,都会提供很大的帮助。
下面主要讲一下,如何编译upstream的最新代码,并使他运行在PopMetal和PX2开发板上。
(1)首先现在代码,在这里我们下载linux-stable分之的代码。
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的基本系统跑起来,这个后面再写。
相关文章推荐
- Firefly-RK3288系统界面预览
- Firefly RK3288开源硬件项目启动
- Firefly-RK3288全新Layout板
- Linux kernel浮点计算支持
- Linux内核阅读--文件路径查找(一)
- Linux内核阅读--文件路径查找(二)
- Android4学习-高级编程读书笔记开始篇
- Linux shell脚本处理查询结果
- 一个悲伤的gcc故事
- Epoll模型
- 用QEMU+GDB 调试LINUX KERNEL
- Linux学习之进程
- linux驱动入门手记
- 芯客网推出PopMetal基于RK3288开源开发板上市!
- 【曝光】Rayeager PX2开源开发板运行Firefox OS图
- 如何吃好Android5.0棒棒糖
- 转载:KSM (内存管理合并相同页)
- 转载:Linux内存管理之页面回收
- Slab,Slab,Slub概念总述
- 转载:Linux伙伴系统(三)--分配页