建设论坛网站需要做什么,水果电商网站建设相关文献,建设网站难吗,建设部资质网站查询目录
一 树莓派Linux的源码配置
① 内核源码下载说明
② 三种方法配置源码
二 树莓派Linux内核编译
① 内核编译
② 编译时报错及解决方案#xff08;亲测#xff09;
三 更换树莓派Linux内核
操作步骤说明
● dmesg报错及解决方案#xff08;亲测#xff0…目录
一 树莓派Linux的源码配置
① 内核源码下载说明
② 三种方法配置源码
二 树莓派Linux内核编译
① 内核编译
② 编译时报错及解决方案亲测
三 更换树莓派Linux内核
操作步骤说明
● dmesg报错及解决方案亲测 一 树莓派Linux的源码配置
配置说明驱动代码的编译需要一个提前编译好的内核所以需要先编译内核而编译内核又必须提前完成相关的源码配置
配置目标最终生成 .config文件该文件是指导Makefile去把有用东西的组织成内核。
① 内核源码下载说明
● 查看树莓派原内核版本号 uname -r ● 树莓派Linux源码下载网址https://github.com/raspberrypi/ 1将下载好的工具链文件放入Windows中与Ubuntu的共享文件夹中
2打开Ubuntu从共享文件夹拷贝到工作目录。输入命令
cp /mnt/hgfs/share/linux-rpi-4.14.y.zip .//我的共享文件名是share
3 解压文件 unzip linux-rpi-4.14.y.zip
② 三种方法配置源码
● 第一种方法我们买的开发板厂家一般会自配linux内核的源码比如买了树莓派树莓派一般自带linux内核源码。直接使用厂家的.config文件进行配置。
进入源码文件搜索 指令
find . -name *_defconfig树莓派1的工程是bcmrpi_defconfig
树莓派2、3的工程是bcm2709_defconfig。
配置说明直接把厂家.config拷贝成.config cp 厂家.config .config
下面命令是将工程bcm2709_defconfig配置到 .config里
ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 make bcm2709_defconfig
ARCHarm指明当前要编译arm虽然树莓派是64位的这里仍然选择arm而不是arm64。CROSS_COMPILE指明交叉工具链名称。KERNEL指明kernel类型树莓派1设置为kernel树莓派2、3设置为kernel7。● 第二种方法make menuconfig 一项项配置通常是基于厂家的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 lib32ncurses5
输入命令
ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 make menuconfig
进入下图菜单页面即可进行相关配置 * 编译进内核 zImage包含了驱动 M 模块方式生成驱动文件xxx.ko 系统启动后通过命令inmosd xxx.ko 加载 ● 第三种方法 完全靠自己来移植
二 树莓派Linux内核编译
① 内核编译
对树莓派内核源码进行配置后接下来就要进行树莓派Linux内核的编译需要树莓派交叉编译工具、树莓派内核。
交叉编译工具链的下载和环境配置在我的这篇文章有详细介绍http://t.csdn.cn/w7wBm
在上面的基础上输入下面指令进行编译
ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 make -j4 zImage modules dtbs
//编译时长大概20分钟
j4指定用多少电脑资源进行编译多少核 4核根据自己虚拟机配置zImage生成内核镜像modules要生成驱动模块dtbs生成配置文件
编译完成后可以看到源码树目录多了vmlinux这个文件,如果编译失败则没有此文件成功后目标zImage镜像在arch/arm/boot目录下此步ARM架构的芯片都是类似(vmlinux是未压缩的liunxzImage是压缩好的liunx)。 检查是否编译成功若生成zImage文件则编译成功 ② 编译时报错及解决方案亲测
● 错误提示
/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss0x10): multiple definition of yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss0x0): first defined here ● 解决方案
修改scripts/dtc目录下的dtc-lexer.lex.c_shipped文件中找到
YYLTYPE yyloc这一行在640行左右的位置在之前面加上extern //不加分号;
保存退出
make 编译
正常编译
三 更换树莓派Linux内核
操作步骤说明
① 打包zImage文件。打包zImage成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img ② 树莓派断电拔出树莓派的SD卡插到读卡器读卡器插入电脑映射到虚拟机
插入读卡器会有如下图选项提示选择虚拟机及名称。如果没有如下提示一定要自己调试防止主机读走USB数据。 然后在命令行输入指令dmesg查看底层的一些硬件数据这里查看读卡器映射的内容
● dmesg报错及解决方案亲测
sudo sysctl kernel.dmesg_restrict0 连接USB成功出现sdb1、sdb2则为连接成功如果只有一个sdb1则需要重新往SD刷入系统有可能是sdc1、sdc2或者sdd1、sdd2。 把树莓派的sd卡插入ubuntu系统电脑树莓派的sd卡有两个分区 ● 一个fat分区是boot相关的内容kernel的img文件就放在这个分区里 ● 一个是ext4分区也就是系统的根目录分区。 ③ 数据拷贝挂载U盘
回到工作目录mkdir创建data1和data2两个目录分别挂载两个分区的内容
dhwdhw-virtual-machine:~$ mkdir data1
dhwdhw-virtual-machine:~$ mkdir data2
挂载U盘 ● data1是fat分区是boot相关的内容kernel的img ● data2是ext4分区也就是系统的根目录分区。 ④ 安装modules。含有设备驱动文件比如HDMI,WIFI,USB,IO等
在ext4分区操作这里的data2分是ext4分区需要root权限。
sudo ARCHarm CROSS_COMPILEarm-linux-gnueabihf- KERNELkernel7 make INSTALL_MOD_PATH/home/dhw/data2 modules_install
⑤ 安装更新 kernel.img 文件注意镜像名字是kernel7.img
备份kernel7.img防止存在错误操作 ● cd /home/dhw/data1 ● cp kernel7.img kernel7OLD.img ⑥ 把打包的kernel_new.img文件拷贝到data1分区起名kernel7.img覆盖原来的kernel7.img
cp kernel_new.img /home/dhw/data1/kernel7.img 检查拷贝是否有误md5sum
Linux中每个文件都有一个编码号就是md5的值。如果拷贝文件出错md5的值就会发生变化。
下图中原文件和拷贝后的文件md5的值一样说明拷贝无误。 ⑦ 拷贝其他相关文件
cp arch/arm/boot/dts/.*dtb* /home/dhw/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/dhw/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/dhw/data1/overlays/
⑧ 虚拟机弹出USB让USB被主机识别
进入cmdline.txt文件添加红框里的部分目的是稳妥起见让操作系统能正常运行 ⑨ SD卡插入树莓派用串口登陆就能看见操作系统运行起来
查看内核版本uname -r
树莓派Linux更换内核前的版本号 树莓派Linux更换内核后的版本号 完成换源