Raspberry Pi 系统安装以及在Ubuntu上进行内核编译

本例使用(Raspberry Pi Zero-w)

一、树莓派系统安装

1. 准备工作

(1)硬件准备:Raspberry Pi Zero W(以下简称RPI),RPI电源线,SD卡,SD卡读卡器,笔记本电脑,无线路由器(电脑和RPI处于同一wifi网络下即可)。

(2)软件准备:Raspbrain系统镜像文件,SDFormatter,Win32diskim,PuTTY。

2. 步骤

(1)从官网(https://www.raspberrypi.org/downloads/raspbian/)下载Raspbrain系统,解压得到镜像文件。

(2)将SD卡插入读卡器然后接入电脑,用SDFormatter格式化SD卡/或使用linux mkfs.vfat命令也可。

(3)用Win32diskim软件烧系统。

         镜像处选择你刚才下好的系统镜像,设备处选择你的SD卡,点击"写",写完后会显示成功。

(4)配置wifi文件和SSH。

         ▲在SD卡中新建文件,命名为wpa_supplicant.conf,输入如下内容并保存:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="xxxxxxx"
psk="xxxxxxxx"
key_mgmt=WPA-PSK
priority=1
}

          其中的ssid为指定树莓派要连接的wifi名称psk密码,key_mgmt为加密方式。

       ▲在SD卡中新建文件夹,命名为ssh,内容为空。ssh协议远程连接用。

(5)将SD卡插入RPI,连接电源线。

打开电脑浏览器,登录无线路由器默认终端配置地址(路由器标签上注明,本例中是“192.168.0.1”),找到RPI的IP(本例中是“192.168.0.106”)。

用电脑打开PuTTY,选择“SSH”,IP地址处填入RPI的IP。

第一次登陆会显示警告信息,选择“是”。

“login as:”处输入“pi”,默认密码是“raspberry”,登陆成功。


(6)root
树莓派Raspbian系统密码是多少?树莓派Raspbian系统默认登录用户名为pi,该账户默认密码是raspberry(可在raspi-config中修改)。树莓派的Raspbian系统root用户默认是禁用状态,且没有密码,所以要先设置个密码,然后开启才能正常使用。


使用pi账户进行登陆命令行,执行命令:【sudo passwd root】设置root用户密码,然后在执行【sudo passwd --unlock root】开启root账户,在使用【su root】测试是否生效!

重新锁定root账户可执行命令:sudo passwd --lock root

 

二、树莓派内核编译

在树莓派的系统中,提供了很多的现成的驱动程序和资源,尽管这样,还是远远不能适用于大部分情况下的设计使用,所以在使用某些设备时,需要自行编写或者修改一些驱动,以适用于想要控制的设备。

1.开发环境和准备

(1)我的开发环境为ubuntu 16.04。首先安装Git和构建依赖项,执行命令:

sudo apt-get install git bc bison flex libssl-dev

(2)连接树莓派查询系统版本 (命令: uname -a)windows环境下使用SSH远程登陆树莓派查询;

如上图可知,我的Raspber Pi系统为Linux raspberrypi 4.14.79+版本。这一点很重要,将决定需要编译的内核版本以及编译完成后的校验。

2.获取内核源码,交叉编译工具链

(1)获取Raspber Pi系统内核源码

树莓派官方将树莓派相关的大部分资源都放在了GitHub上,所以只需再GitHub的相应板块找到即可,链接地址为:https://github.com/raspberrypi    如下图:

Raspberry Pi 系统安装以及在Ubuntu上进行内核编译_第1张图片

所以直接在Linux栏目中就能找到相关的内核源码了。

链接地址:https://github.com/raspberrypi/linux/tree/rpi-4.14.y

如下图:

Raspberry Pi 系统安装以及在Ubuntu上进行内核编译_第2张图片

如上图,即为4.14版本的内核源码了,选择Download ZIP下载压缩包即可,下载成功后再解压。

也可用

git clone --depth=1 --branch rpi-4.14.y https://github.com/raspberrypi/linux

(2)获取交叉编译工具链

同样的在GitHub的RaspberryPi板块也提供了tools工具资源,链接地址:https://github.com/raspberrypi/tools/tree/master/arm-bcm2708     如下图:Raspberry Pi 系统安装以及在Ubuntu上进行内核编译_第3张图片

如上图可见tools再板块上的路径,再路径下找到相应交叉编译工具链,可知树莓派官方提供了5种交叉编译工具链(最下方的是同一个工具链,只是针对32bit系统和64bit系统做了区分),先将其克隆下来。

命令: git clone https://github.com/raspberrypi/tools

3.内核配置文件

 

配置内核;除了默认配置外,您可能希望更详细地配置您的内核或应用来自其他来源的补丁,以添加或删除所需的功能:
根据您的树莓派版本运行以下命令。

cd linux
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig

Raspberry Pi 系统安装以及在Ubuntu上进行内核编译_第4张图片

在目录下生成 .config文件,用ls -a可以查看到。

4.编译前的准备

(1)确定树莓派系统内的编译器版本。

在putty上使用命令 cat /proc/version查询树莓派系统的编译器的 版本号。如下图:

如上图所知,gcc编译器的版本号为4.9.3版本,并且更新时间为2018年3月4日。

(2)选择编译工具链的版本,因为下载到的交叉编译工具链有好几个版本,所以应该选择其中一个,但是考虑到版本的匹配问题(如果编译器的版本和原有系统的版本不一样的话,有可能会出现一些莫名奇妙的问题,特别是在开发驱动时)。下面查看各个编译器的版本。

(筛选过程略过)

arm-bcm2708hardfp-linux-gnueabi编译器:切换到/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin

使用命令:./arm-linux-gnueabihf-gcc -v

 

如上图,可知此版本的编译器和莓派系统的编译器版本是一个版本,所以理当使用它进行编译。

 

(3)安装编译工具链

更新$PATH环境变量使系统知道交叉编译所需的文件位置。

echo PATH=\$PATH:/home/cm/raspberrypi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin >> ~/.bashrc
source ~/.bashrc

5.开始编译

执行命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j5

这句就是真正的编译了,等等完成吧!如果电脑满足要求的话,可以再make的后面加上-j2,-j4,-j6,-j8等等,表示使用多少个线程进行编译,可以提高编译速度,编译是一个漫长的过程。编译成功后,在路径arch/arm/boot/下会生成zImage镜像文件。

当插入SD卡后,立即就被识别了,可以将SD卡设备挂载到某目录上进行访问,也可以直接访问。默认在/media/python/目录下(madia目录为PC平台下根目录下的子目录,python为当前登陆用名子的目录)会看到两个目录,此即为SD卡的两个分区(分别是fat32属性的分区和ext4属性的分区),如下图:

如上图可知,boot目录为fat32分区的目录,另一个为ext4分区的目录。而我们要备份的是boot目录,因为ext4分区的目录其实就是作为树莓派再运行是的跟文件系统。

 6.安装模块驱动

 

sudo su
source /home/cm/.bashrc 

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/cm/rootfs modules_install

7.将编译的内核和Device Tree复制到SD卡上:

#备份树莓派下面的内核镜像
sudo cp /media/cm/boot/kernel.img /media/cm/boot/kernel-backup.img
#把在Ubuntu下编译好的内核镜像复制到树莓派内核镜像存放的位置
sudo cp arch/arm/boot/zImage /media/cm/boot/kernel.img
#DeviceTree复制到树莓派相应位置
sudo cp arch/arm/boot/dts/*.dtb /media/cm/boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/cm/boot/overlays/
sudo cp arch/arm/boot/dts//overlays/README  /media/cm/boot/overlays/

sync

#卸载挂载分区
sudo umount /media/cm/boot/
sudo umount /media/cm/rootfs

 

8.享用新的kernel

将SD卡插回树莓派!就可以看到其可以正常启动了。那么代表这树莓派raspberrypi操作系统内核源码的编译成功。这样,后面就可以自由的添加各种驱动了。
在树莓派上查看内核版本已经变成4.14.98+,原来为4.14.79+

你可能感兴趣的:(Linux)