编译内核
准备工作
安装开发包
安装开发包:
sudo apt-get install build-essential lzop libncurses5-dev libssl-dev # 如果使用的是 64 位的 ubuntu,还需要安装: sudo apt-get install libc6:i386
安装 mkbootimg 工具
git clone https://github.com/neo-technologies/rockchip-mkbootimg.git cd rockchip-mkbootimg make && sudo make install
获取内核源码和安装交叉编译工具链
如果已经下载 firefly-rk3128 android sdk,内核源码和交叉编译工具链分别在 sdk/kernel 和 sdk/prebuilts 目录里,无需额外下载,请跳到下一步。如果没有下载 sdk,则需要下载内核源码及 android 的 arm-eabi-4.6 交叉编译工具链。
下载内核源码:
git clone https://bitbucket.org/t-firefly/fireprime-kernel.git
编译内核
编译内核映像
如果不是在 sdk 里编译内核,则需要先指定 arch 和 cross_compile:
export arch=arm export cross_compile=/path/to/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
在内核源码目录里执行:
make fireprime-linux_defconfig make -j8 rk3128-fireprime.img
编译内核模块
在内核源码目录里执行:
make modules mkdir modules_install make install_mod_path=./modules_install modules_install
内核模块是需要拷到根文件系统中即可:
rsync -av ./modules_install/ /path/to/your/rfs/
也可以远程拷贝到开发板的根文件系统中,这需要开发板可以通过 ssh 远程连接:
rsync -av ./modules_install/ root@开发板ip:/
最后清理一下模块安装目录(该目录含有链接,会影响 sdk 的编译):
rm -rf ./modules_install
创建 linux-boot.img
创建内存盘
内核启动时会加载内存盘作为初始的根文件系统,再加载实际的根存储设备,最后切换过去。
git clone -b fireprime https://github.com/teefirefly/initrd.git make -c initrd
打包内核和内存盘
将 kernel 和 initrd 打包成 linux-boot.img:
truncate -s %4 initrd.img mkbootimg --kernel arch/arm/boot/zimage --ramdisk initrd.img -o linux-boot.img
修改 parameter 文件
linux 的根文件系统(rfs)可能在不同的分区或存储设备上(emmc、tf 卡或 u 盘),所以需要在内核的参数中指定。修改 parameter 文件中的 cmdline 行,根据实际情况加入以下之一(# 后是注释,不需要加入):
root=/dev/block/mtd/by-name/linuxroot # 名为 linuxroot 的 nand 分区 root=/dev/mmcblk0p1 # tf 卡的第一个分区 root=/dev/sda1 # u 盘或 usb 硬盘的第一个分区 root=label=linuxroot # 卷标为 linuxroot 的分区,可以是任一存储设备
以下是官方双启动固件所使用的 parameter 文件,供参考:
firmware_ver:5.1 machine_model:rk312x machine_id:007 manufacturer:rk30sdk magic: 0x5041524b atag: 0x60000800 machine: 312x check_mask: 0x80 kernel_img: 0x60408000 #recover_key: 1,1,0,20,0 cmdline:console=ttyfiq0,115200 earlyprintk androidboot.hardware=rk30board androidboot.console=ttyfiq0 board.ap_has_alsa=0 init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00180000@0x00092000(system),0x00002000@0x00212000(metadata),0x00200000@0x00214000(userdata),0x00020000@0x00414000(radical_update),-@0x00434000(user)
烧写到设备
参考《升级固件》烧写 parameter 和相应的分区映像。如果是在官方固件的基础上更新,则需要根据固件的类型,将 linux-boot.img 烧写至对应的分区:
如果还没有烧写根文件系统的,可以下载预先做好的镜像,或定制自己的根文件系统,并烧写到 parameter 文件指定的根分区中。
英国SST 高温氧气分析仪 - OXY-Flex相关应用解决方案
2019年将是区块链技术成为主流的一年
华邦电成为iPhone新机的NOR Flash芯片独家供货商
中国WJ-700无人机飞行续航时间长达到20小时
英飞凌与格芯达成新合作 格芯和Amkor封测厂落成
Firefly-RK3128主板编译内核介绍
欧科变频器在工业洗水机上的应用
解读AD5933控制实现阻抗测量系统电路图
新亮光子独立自主研发出覆盖各种LED封装的VCSEL二极管
本安防爆型激光对射探测器的应用
PIC单片机外部振荡电路设计
苏宁物流打造AI无人化,引领行业变革
使用555计时器的警笛电路
华为P10和iPhone7的人物拍照对比,又是国产完胜苹果?
葡萄牙因iPhone电池门将向苹果发起集体诉讼
我们在使用电容降压时一般需要注意哪些事项
三分钟了解PCB互连中因果和非因果响应
微软承认遭遇黑客攻击导致源代码泄露
鸿蒙系统和安卓有关系吗
麒麟980研发耗资3亿美元 3nm制程工艺研发资金将达到40-50亿美元