做网站的硬件成本,网站开发人员 把网站注销,html官方网站,wordpress博客后台驱动代码的编写需要一个提前编译好的内核#xff0c;编译内核就必须配置#xff0c;配置的最终目标会生成.config文件#xff0c;该文件指导makefile去把有用的东西组织成内核。 如何生成.config文件#xff1a; 第一种方式#xff1a; 厂家配linux内核源码#xff0c;比…驱动代码的编写需要一个提前编译好的内核编译内核就必须配置配置的最终目标会生成.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
ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 make bcm2709_defconfig
//ARCH是指定是arm架构
//CROSS_COMPILE指定编译器是arm-linux-gnueabihf-不同架构用不同的编译器
//KERNEL是树莓派里特别指定的
//用的config是bcm2709_defconfig运行结果如下图
fengubuntu:~/SYSTEM/linux-rpi-4.14.y$ ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 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 bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc6 lib32gcc1 lib32ncurses51、执行menuconfig
ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 make menuconfig如果没什么改的就不用执行这一步。
2、编译
ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 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 data1
mkdir data2
//创建两个文件夹对应stb1和stb2挂载U盘
sudo mount /dev/sdb1 data1 一个是fat分区是boot相关的内容kernel的img
sudo mount /dev/sdb2 data2 一个是ext4分区也就是系统的根目录分区
//将dev下的sdb1和sdb2分别挂载到data1和data2如图可以看到sd卡中的文件以挂载到data1和data2
三、开始拷贝 1、安装modules也是编译生成的主要是设备驱动文件比如hdmiusbwifi…
sudo ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 make INSTALL_MOD_PATH[ext4] modules_install
//其中的[ext4]是根据自己挂载的文件名称填写是存放根目录的文件夹路径。
演示
sudo ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 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 系统启动后通过命令inmosd xxx.ko加载
指令补充
dmesg
//查看硬件底层的一些连接数据fengubuntu:~/SYSTEM/linux-rpi-4.14.y$ du kernel_new.img
4828 kernel_new.img
fengubuntu:~/SYSTEM/linux-rpi-4.14.y$ du kernel_new.img -h
4.8M kernel_new.img
fengubuntu:~/SYSTEM/linux-rpi-4.14.y$ md5sum kernel_new.img
6350420d173bddfe02f4d8f81791e91f kernel_new.img
fengubuntu:~/SYSTEM/linux-rpi-4.14.y$ md5sum /home/feng/data1/kernel7.img
6350420d173bddfe02f4d8f81791e91f /home/feng/data1/kernel7.img
fengubuntu:~/SYSTEM/linux-rpi-4.14.y$
//du指令查看文件的大小-h是以兆为单位显示
//每个文件都有它唯一的的编码号就是md5sum的值在拷贝时若发生损坏则md5sum的值会发生改变可以用其验证是否烤坏。参考博文https://blog.csdn.net/nicekwell/article/details/78482833