编译64位linux内核,为树莓派4编译64位的内核
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
树莓派从3代开始就已经是64位的CPU了,64位的CPU当然要使用64位的系统了。但是即便性能更强大的树莓派4都已经发布两三个月了,树莓派官方也没有放出64位的系统,
我想这可能是为了照顾3代以前的树莓派吧,毕竟一个系统要适配所有的产品,同时系统升级到64位,对于树莓派的整个软件生态来说都是一次改头换面的大更新,树莓派基金会作为一个非营利性的组织,精力可能有点不够,所以官方的64位系统还得再等等。
不过如果你网上搜索 “树莓派 64位系统”, 会发现现在已经有很多非官方的64位系统了,这是因为树莓派的内核是开源的,64位的内核是可以从源码编译的,所以网上的所有的树莓派64位系统,包括所谓的 “全球首发”的64位debain,
都是从树莓派的Linux内核源码编译来的。
对于网上那些魔改内核的64位系统,不做评价。但对于处女座有强迫症的人来说,要想体验到真正原滋原味的树莓派64位系统,还是得自己动手从头编译。
本文背景即基于此。树莓派官方有一篇关于内核编译的文章:kernel building,
作为官方的教程,肯定是很详细的,但是这篇是针对32位内核的,所以我重新梳理一下编译64位内核的过程。
先说一下编译环境:
主机:archlinux x86_64
需要的软件:
make
git
aarch64交叉编译工具: aarch64-linux-gnu-gcc
flex, libssl-dev, vbuild-essential,bison等基础构建工具大部分系统都是会安装的,编译时缺哪一个安装哪一个。
对于archlinux来说,这些软件局可以使用pacman安装。
编译环境的搭建不多说,都是很简单的,aarch64-linux-gnu-gcc可以手动下载压缩包解压,把路径添加到环境变量,或者使用apt, yum等包管理安装。
克隆树莓派内核源码:1git clone -b rpi-5.3.y --depth=1 https://github.com/raspberrypi/linux.git raspberrypi-linux
-b 选择分支,选择了最新的5.3,默认的是4.19,–depth=1 只克隆最新的一次commit,由于只是编译,所以不必把这个仓库都完整的克隆下来(整个仓库有十几个G大小)。
有哪些分支可以很容易在github上看到:
代码将会克隆到raspberrypi-linux目录,
进入这个目录:1cd raspberrypi-linux
先进行一些编译参数设置:也就是内核调参,大部分的内核魔改都基于此处,
生成默认的内核配置文件:
对于编译树莓派4的64位内核来说,执行:1make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
执行该命令后会在raspberrypi-linux的目录下生成一个.config文件,打开是一项项的linux内核配置,
可以根据自己的需要修改各项配置,比如开启kvm支持,取消部分不必要的驱动达到裁剪内核的目的。
关于内核配置,一本书可能都说不完。使用默认配置即可。
如需修改内核配置可以直接编辑.config文件,设置各项的参数值,也可以执行一下命令:1make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
有一个简单的GUI界面来修改内核配置,相信装过gentoo的人对此不会陌生。
开始编译
输入以下命令:
11make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j6
这里的-j选项是开启多线程编译,加快编译速度,一般为CPU数量的1.5倍以内,在树莓派上编译设置为4就好了。
如果没什么问题,可以去喝杯茶。
编译完毕,将内核模块安装进树莓派的系统内:1sudo make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/rootfs modules_install
/mnt/rootfs 是树莓派根目录所在的路径,我这里把装有树莓派系统的tf卡的根目录挂载在了/mnt/rootfs, 所以就把内核安装进这个目录
再把内核的其他文件手动复制进树莓派系统的/boot下的指定目录(tf卡中只有几十兆的那个分区,我这里挂载到了本机的/mnt/boot):
复制编译好的内核:1sudo cp arch/arm64/boot/Image /mnt/boot/kernel8.img
复制不同版本的树莓派的dtb文件到树莓派系统的/boot:。1sudo cp arch/arm64/boot/dts/broadcom/*.dtb /mnt/boot
复制overlays中的文件到树莓派系统的/boot/overlays, README也复制一下:1
2sudo cp arch/arm64/boot/dts/overlays/*.dtb* /mnt/loop0p1/overlays/
sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
最后在树莓派的/boot/config.txt文件中注意指定启动内核为新编译的内核,即kernel8.img:1kernel=kernel8.img
至此,原滋原味的64位内核就编译安装完成了。
如果树莓派运行着64位的系统,以上操作也可以在树莓派上完成,就不需要交叉编译工具,直接编译即可。
在树莓派上编译内核的话可能要喝十杯茶了。
编译64位linux内核,为树莓派4编译64位的内核相关推荐
- java 位运算取8位_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译
Java 9 引入了 aot 编译方式,能够将 class 文件直接编译成可执行二进制文件.目前 Java 9 的 early access 版本已经提供了编译工具,让我们来看看它的功能吧. 注意:按 ...
- found linux系统wget出现not_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译
Java 9 引入了 aot 编译方式,能够将 class 文件直接编译成可执行二进制文件.目前 Java 9 的 early access 版本已经提供了编译工具,让我们来看看它的功能吧. 注意:按 ...
- linux 内核编译不能打字,linux系统升级后,手动编译的kernel无法启动问题
linux系统升级后,手动编译的kernel无法启动问题 linux系统升级后,手动编译的kernel无法启动问题 做开发相关,需要编译3.18的kernel,x86_64的,但是我的deepin升级 ...
- linux 目录的粘滞位,Linux文件和目录的粘滞位(sticky bit)
文件的粘滞位(sticky)位是作什么用的? 普通文件的sticky位会被linux内核忽略, 目录的sticky位表示这个目录里的文件只能被owner和root删除 粘着位(Sticky bit) ...
- linux编译ipp多线程,Linux 下 Intel IPP 模块编译
1. 平台搭建 平台 CentOs 6.3 2. IPP 下载 3. IPP 编译 不同版本的IPP 版本编译操作差异比较大,最好的办法就是查询下载版本的IPP模块中的document. 3.1 设 ...
- 64位linux安装mysql数据库吗_CentOS7 64位安装mysql教程
从最新版本的linux系统开始,默认的是 Mariadb而不是mysql!这里依旧以mysql为例进行展示 1.先检查系统是否装有mysql rpm -qa | grep mysql 1 1 这里返回 ...
- linux下怎么编译贪吃蛇,Linux 环境下C语言编译实现贪吃蛇游戏(转载)
本文转载 http://www.linuxidc.com/Linux/2011-08/41375.htm本文可以改进的就是它的链表实现的方式,可以考虑内核的链表实现 #include #include ...
- linux emule 编译 wx-config --libs,Linux下的wxWidgets静态编译实现方法
--Linux distribution:Ubuntu 10.04.3 LTS (Lucid Lynx) --wxWidgets version:2.8.12 --gcc version:4.4.3 ...
- Linux指令设置波特率停止位,linux下的picocom怎么设置停止位,波特率
2016-07-29 回答 can位时间特性寄存器 (can_btr) 地址偏移量: 0x1c 复位值: 0x0123 0000 注: 当can处于初始化模式时,该寄存器只能由软件访问. 图2 位31 ...
最新文章
- 电大计算机应用模块四实2010,国家开放大学《计算机应用基础》考试与答案形考任务模块2Word2010文字处理系统—客观题测验答案.docx...
- maven远程发布jar
- mikadonic-iptables学习笔记
- div隐藏select显示的解决办法(就死select挡住了div) 不是网上找到的那五种
- jqueryForm 异步上传图片文件
- ROM与RAM混合设计
- 转-ios设备唯一标识获取策略
- 素数的判断(c语言)
- Esxi 6.7u3 安装之重封装网卡驱动与NVME驱动
- FTP搜索引擎的设计与实现
- MATLAB绘图函数fplot详解
- java 实现屏幕录像_用JAVA捕获屏幕、屏幕录像、播放
- matlab运行很多columns,columns函数的使用方法
- BMZ-MISC-损坏的压缩包
- Part 1: 如何把Power BI 嵌入到sharepoint 网站
- 感光器尺寸 面积 转换 计算
- 《如果梵高生在中国》笔记
- 第十一章:MATLAB:符号运算(符号与数值,符号矩阵)
- 前端之网站结构语义化
- C primer plus 第四章课后编程练习答案笔记解释整理