PopMetal和PX2上运行upstream linux kernel代码

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

该配置主要是在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的基本系统跑起来,这个后面再写。

时间: 2024-10-29 19:08:11

PopMetal和PX2上运行upstream linux kernel代码的相关文章

Hyper-V上运行的Linux虚拟机验证是否安装了集成服务

Hyper-V上运行的Linux虚拟机验证是否安装了集成服务 ps aux|grep "hv"root       311  0.0  0.0      0     0 ?        S    Sep07   0:00 [hv_vmbus_con/0]root       312  0.0  0.0      0     0 ?        S    Sep07   0:00 [hv_vmbus_con/1]root       313  0.0  0.0      0    

使用linux kernel代码编译perf工具

环境:Qemu + ARMv8 perf是一款综合性分析工具,大到系统全局性性能,再小到进程线程级别,甚至到函数及汇编级别. 在内核源码目录下执行编译脚本: #!/bin/bash cross_compile=aarch64-linux-gnu- make CROSS_COMPILE=$cross_compile ARCH=arm64 defconfig make CROSS_COMPILE=$cross_compile ARCH=arm64 menuconfig make CROSS_COMP

在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件.那么,如何才能DIY自己的内核呢?这篇文章一一道来. 一. 首选

转:在Web上运行Linux—js/linux模拟器

一个叫Fabrice Bellard 的程序员写了一段Javascript在Web浏览器中启动Linux(原网页,我把这个网页iframe在了下面),目前,你只能使用Firefox 4和Chrome 11 运行这个Linux.这不是什么假的模仿Linux的东西,这是实实在在的运行一个Linux.这一举动还引起了很多很牛人的关注,包括Javascript的创建者Brendan Eich . ======================================================

如何进行Linux Kernel 开发

转自:http://www.cppblog.com/flyonok/archive/2011/04/15/144316.html 如何进行Linux Kernel 开发? (Take 3) 译者序:这是一篇很重要的文档,它介绍了内核开发的方方面面.这篇文档已被加入到内核源码树的Documentation文档里(名字为HOWTO),你可以在最新的内核树里找到它.尽管已经有网友翻译过这篇文档,但是我还是决定自己再翻译一遍.翻译完之后,我的感触是如果依靠翻译来进行学习,速度太慢了.以后的技术文档直接看

2. ubuntu下载编译linux kernel

一. 引言 诚如老罗所言,android源代码里面并没有带linux kernel代码.它使用的是预先编译好的kernel,大家可以使用adb shell cat proc/version就可以查看到,如下: [email protected]:~/working_directory$ adb shell cat proc/version Linux version 2.6.29-00261-g0097074-dirty ([email protected]) (gcc version 4.4.

让Qt在MIPS Linux上运行 good

下载 首先下载Qt everywhere,当前的版本是4.7.2,可以从nokia的网站上下载,也可以从git服务器上下载.考虑到文件有200M 以上的大小,下载速率低于25kBPS的,需要考虑从什么地方复制一份,否则需要等待较长时间才能下载下来.我是在家里下载这个文件的,所以开始编译已经是第二天了.考虑提升员工效率的话,需要预先预备好这些下载文件,或者增加接入带宽. 解压 第一步下载的文件是一个tar包,所以需要解压,通常解压需要在unix/Linux环境下进行,如果只是看代码,windows

Linux Kernel 2.6.28 以上有BUG,系统运行第208.5天down机

简介: 业务服务器有一台服务器出现意外down机,服务器ping 不通.无法登陆,本想通过公司KVM系统登陆系统重启解决,登陆KVM后发现系统屏幕打印大量的内核错误,KVM无法使用.无法发送重启服务器.果断联系 机房人员帮助手工重启,手动重启服务器后服务器运行状态回归正常. 在服务器重启前通过KVM管理系统能看到系统屏幕上打印的内核错误,此时做了一个页面截屏,后根据屏幕打印的报错关键字,进行查找追踪发现原来我们的linux服务器内核bug问题导致. 此内核BUG问题会直接导致服务器down机,查

linux top cset schedtool 对于多核CPU,如何限制进程在一个CPU上运行

对于多核CPU,如何限制进程在一个CPU上运行呢? 如何察看某个进程在哪个CPU上运行: 在控制台中输入: #top -d 1 之后按下f.进入top Current Fields设置页面: 选中:j: P          = Last used cpu (SMP) 则多了一项:P 显示此进程使用哪个CPU. 经过试验发现:同一个进程,在不同时刻,会使用不同CPU Core.这应该是Linux Kernel SMP处理的. 本程序通过这个方法查看,将会在多个CPU上运行. 想要让它在一个CPU