700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 配置树莓派linux的内核和编译并将镜像拷贝至树莓派

配置树莓派linux的内核和编译并将镜像拷贝至树莓派

时间:2018-12-03 04:41:24

相关推荐

配置树莓派linux的内核和编译并将镜像拷贝至树莓派

驱动代码的编写需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成.config文件,该文件指导makefile去把有用的东西组织成内核。

如何生成.config文件:

第一种方式:

厂家配linux内核源码,比如说买了树莓派,现在要研发树莓派的底层,厂家会提供树莓派linux内核源码,直接cp 厂家.config .config

第二种方式:

make menuconfig 一项项配置,通常是基于厂家的config来配置的。

第三种方式:

完全自己来

如何配置树莓派linux的内核:

1、配置config

linux源码中有很多工程:

树莓派1的工程是bcmrpi_defconfig;

树莓派2、3的工程是bcm2709_defconfig。

1.1、获取当前树莓派的config

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig//ARCH是指定是arm架构//CROSS_COMPILE指定编译器是arm-linux-gnueabihf-(不同架构用不同的编译器)//KERNEL是树莓派里特别指定的//用的config是bcm2709_defconfig

运行结果如下图:

feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfigHOSTCC scripts/basic/fixdepHOSTCC scripts/kconfig/conf.oSHIPPED scripts/kconfig/zconf.tab.cSHIPPED scripts/kconfig/zconf.lex.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD scripts/kconfig/conf## configuration written to .config//将厂家的config变成了.config#

此命令功能是获取bcm2709_defconfig的配置到 .config里。

我们可以直接用工程里的配置,但这样的话可能会丢失原来使用的树莓派的配置,这里提供一个方法可以获取当前正在使用的树莓派的config。

出现上图内核配置已完成!下一步内核的编译。

编译:

安装必要的库:

sudo apt-get install bcsudo apt-get install libncurses5-dev libncursesw5-devsudo apt-get install zlib1g:i386sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

1、执行menuconfig

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig

如果没什么改的就不用执行这一步。

2、编译

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs //-j4指定用多少电脑资源来编译,4是4进程。//zImage是生成内核镜像//modules要生成驱动模块//dtbs是生成配置文件

以n进程编译。不指明几进程的话则默认以单进程编译,编译成功后,看到源码树多了vmlinux(没有压缩的linux),失败则无此文件,成功后目标文件zImage镜像在arch/arm/boot底下。

3、打包zImage文件成树莓派可用的xxx.img

直接用linux源码包里的工具:

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img//scripts是一个脚本文件夹,其中的mkknlimg会将zImage打包成kernel_new.img

在本目录生成一个kernel_new.img文件,这个文件就是要放到sd卡中的文件。

注:网上很多地方说的用 tools/mkimage/imagetool-uncompressd.py 的方法不行!!

镜像的拷贝:

一、挂载树莓派sd卡,并安装编译出的DIRECTLY 到sd卡

把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:

一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;

一个是ext4分区,也就是系统的根目录分区。

我们生成的文件涉及到这两个分区的内容,一般插入ubuntu后会自动挂载,fat分区可以不用root权限操作,ext4分区需要root权限操作。

两个分区具体挂载在什么地方可以自己决定,以下用[fat]表示boot挂载的路径,[ext4]表示ext4挂载的路径。

二、挂载

插入sd卡输入dmesg去查看内核的信息,如有设备接入,内核会打印一些驱动方面的信息,如图:会看到两个分区,sdb1和sdb2

数据拷贝:

mkdir data1mkdir data2//创建两个文件夹,对应stb1和stb2

挂载U盘:

sudo mount /dev/sdb1 data1 一个是fat分区,是boot相关的内容,kernel的imgsudo mount /dev/sdb2 data2 一个是ext4分区,也就是系统的根目录分区//将dev下的sdb1和sdb2分别挂载到data1和data2

如图,可以看到sd卡中的文件以挂载到data1和data2:

三、开始拷贝

1、安装modules(也是编译生成的,主要是设备驱动文件,比如:hdmi,usb,wifi…)

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install//其中的[ext4]是根据自己挂载的文件名称填写,是存放根目录的文件夹路径。演示:sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/feng/data2 modules_install

安装后如图:

2、可以考虑先备份(防止拷贝失败,树莓派不能开机)如图:

然后更新 kernel.img 文件,再将新生成的镜像文件拷贝到data1,其名为kernel7.img,将原来的(kernel7.img)覆盖掉,前面已经用 mkknlimg 工具打包了kernel_new.img文件了,把它复制到boot分区并配置使用即可:

cp kernel_new.img [fat]/

3、复制其他相关文件(这些是配置文件,为了能够加载驱动等)

cp arch/arm/boot/dts/.*dtb* [fat]/cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/cp arch/arm/boot/dts/overlays/README [fat]/overlays///*dtb*中的*是通配符就是以.开头以dtb在中间这种形式的文件,.和dtb之间的东西不管,dtb后有什么字符也不管。

更新完成后插回树莓派即可开机,可以通过串口开机(可以看操作系统是否起来了),开机后可以用 uname -a 命令查看kernel信息已经改变。

驱动加载的两种方式:

*编译内核 zImage包含了驱动M模块方式生成驱动文件xxx.ko系统启动后,通过命令inmosdxxx.ko加载

指令补充:

dmesg//查看硬件底层的一些连接数据

feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ du kernel_new.img4828kernel_new.imgfeng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ du kernel_new.img -h4.8Mkernel_new.imgfeng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ md5sum kernel_new.img6350420d173bddfe02f4d8f81791e91f kernel_new.imgfeng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ md5sum /home/feng/data1/kernel7.img 6350420d173bddfe02f4d8f81791e91f /home/feng/data1/kernel7.imgfeng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ //du指令查看文件的大小,-h是以兆为单位显示//每个文件都有它唯一的的编码号就是md5sum的值,在拷贝时若发生损坏则md5sum的值会发生改变,可以用其验证是否烤坏。

参考博文:/nicekwell/article/details/78482833

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。