【linux开发-驱动】-linux内核相关

news2024/10/23 19:13:15

开发板:STM32MP157

一、编译linux内核源码

编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 uImage 的文件,uImage 就是
我们要用的 Linux 镜像文件。

Linux 编 译 的 时 候 需 要 设 置 目 标 板 架 构 ARCH 和 交 叉 编 译 器
CROSS_COMPILE。

ARCH?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabihf-

在linux源码目录下建立一个shell脚本

#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-
stm32mp1_atk_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- uImage dtbs
LOADADDR=0XC2000040 -j16

注:

第二行,执行“make distclean”,清理工程。如果通过图形界面配置linux,慎重使用该脚本

第三行,执 行 “ make xxx_defconfig ”, 配 置 工 程

第四行,执行“make menuconfig”,打开图形配置界面,对 Linux 进行配置

第五行,编译 Linux 内核,后面的“uImage”表示编译 uImage 格式的 Linux 内核,“dtbs”
表示编译设备树,LOADADDR 表示 Linux 内核在 DDR 中的加载地址为 0XC2000040

运行时可能报错:

our display is too small to run Menuconfig! It must be at least 19 lines by 80 columns. scripts/kconfig/Makefile:33: recipe for target 'menuconfig' failed make[1]: *** [menuconfig] Error 1 Makefile:567: recipe for target 'menuconfig' failed make: *** [menuconfig] Error 2 Makefile:613: include/config/auto.conf: 没有那个文件或目录 Makefile:659: include/config/auto.conf.cmd: 没有那个文件或目录 *** *** Configuration file ".config" not found! *** *** Please run some configurator (e.g. "make oldconfig" or *** "make menuconfig" or "make xconfig"). *** Makefile:662: recipe for target '.config' failed make: *** [.config] Error 1

因为终端窗口太小,menuconfig 需要至少 80 列 × 19 行的显示空间来运行。

如果不需要图形配置则退出。

编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 uImage 的文件,uImage 就是
我们要用的 Linux 镜像文件。

在 arch/arm/boot/dts 下生成很多.dtb 文件,这些.dtb 就是设备树文件,我们需要的
是 stm32mp157d-atk.dtb 这个文件

Linux 的编译过程基本和 uboot 一样,都要先执行“make xxx_defconfig”来配置
一下,然后在执行“make uImage”进行编译吗,如果需要使用图形界面配置的话就执行“make
menuconfig”。

二、linux内核移植

编译完后,会得到 uImage 和对应的 stm32mp157d-atk.dtb 设备树

要单独编译 uImage 使用命令:

make uImage LOADADDR=0XC2000040

单独编译设备树的话使用如下命令:

make dtbs

1、获取ST官方linux源码,解压

2、内核打补丁

for p in `ls -1 ../*.patch`; do patch -p1 < $p; done //打补丁

3、生成默认配置文件

make ARCH=arm multi_v7_defconfig "fragment*.config" //生成默认配置文件

完成后 Linux 源码根目录下生成了.config 配置文件

Linux 内核的所有配置项最终都保存在.config 文件里面,最终编译
Linux 内核的时候需要读取.config 里面的配置项。

此时我们只是生成了.config,还并没有将fragment config 补丁文件打进去,执行如入两条命令打补丁:

for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
yes '' | make ARCH=arm oldconfig

Linux 源码根目录下的.config 文件就已经保存了所有的配置项,所以只需要复制一
份.config 作为我们的默认配置文件即可。

三、编译ST官方linux源码

1、修改Makefile

2、网络驱动修改

3、在linux中添加自己的开发板,在 arch/arm/boot/dts/目录下新建名为“stm32mp157d-atk.dtsi”的设备树头文件,然后将 stm32mp15xx-edx.dtsi 文件里面的内容全部复制到 stm32mp157d-atk.dtsi 里面

4、修改设备树文件

测试过了 Linux 系统镜像和设备树,但是我们是通过 tftp 命令从网络上下载测试
的,实际产品开发中最终是要将系统烧写到外部 Flash 中的,比如 EMMC。

怎样将系统镜像打包?

首先就是将 uImage 和 stm32mp157d-atk.dtb 打包在一起,格式为 ext4 格式。

1、先新建一个名为“bootfs”的文件夹,然后将 uImage和 stm32mp157d-atk.dtb 这两个文件放到 bootfs 文件夹下

2、进入到 bootfs 文件夹,创建ext4磁盘:

cd bootfs
dd if=/dev/zero of=bootfs.ext4 bs=1M count=10
mkfs.ext4 -L bootfs bootfs.ext4

3、将系统镜像拷贝到 ext4 磁盘中

4、拷贝完成以后使用 umount 卸载/mnt/bootfs 即可

sudo umount /mnt/bootfs

使用 STM32CubeProgrammer 软件将其烧写到 EMMC 里面。

注:

在调试阶段都不会烧写到 EMMC 里面,而是在 uboot里面使用 tftp 或 nfs 命令通过网络下载系统镜像并运行,这样当我们修改了系统以后只需要将系统镜像复制到 tftp 或 nfs 服务器目录即可

此外:Linux 内核启动以后是需要根文件系统的!!!

参考:正点原子资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

确认:代码覆盖率是无用的管理指标

发现拆解代码覆盖率指标的简单证明 代码覆盖率是衡量软件产品质量的一个强有力的指标&#xff0c;多年来&#xff0c;技术领导者们对此深信不疑。从表面上看&#xff0c;其理由似乎很充分&#xff1a;测试越彻底&#xff0c;代码覆盖率就越高&#xff0c;因此&#xff0c;我们…

数据屏蔽与加密:代理用户需要了解的内容

您可能已经意识到数据安全和隐私的重要性。尽管存在各种方法来解决这两个问题&#xff1a;道德考量和监管要求&#xff0c;在本指南中&#xff0c;我们将重点介绍两种流行的策略&#xff1a;屏蔽和加密 - 以及它们的比较。 那么&#xff0c;哪个方法更胜一筹呢&#xff1f;答案…

时间序列预测(三)——激活函数(Activation Function)

激活函数是神经网络中每个神经元的输出函数&#xff0c;用于引入非线性&#xff0c;从而使神经网络能够逼近复杂的非线性关系。没有激活函数的网络只能表示线性变换&#xff08;如上一篇的线性回归不需要激活函数&#xff09;&#xff0c;因此不能解决实际中的非线性问题。激活…

【Python】从零到一,搭建高效Web服务器,轻松上手!Python开发者必备(文末附带源码分享)

CSDN Python源码分享&#xff1a;实现一个简单的Web服务器 在CSDN上&#xff0c;我们经常分享各种技术文章和源码&#xff0c;帮助开发者们不断提升自己的技能。今天&#xff0c;我将为大家分享一个使用Python实现的简单Web服务器源码。这个Web服务器能够处理基本的HTTP GET请…

Java项目实战II基于Java+Spring Boot+MySQL的桂林旅游景点导游平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 桂林&#xff0c;以其独特的喀斯特地貌、秀美的自然风光闻名遐迩&#xff0c;每年吸引着无数国内外游…

(04)python-opencv图像处理——图像阈值、平滑图像、形态转换、图像梯度

目录 前言 一、图像阈值 1.1 简单的阈值法 1.2 自适应阈值 二、平滑图像 2.1 二维卷积(图像滤波) 2.2 图像模糊 2.2.1均值模糊 2.2.2高斯模糊 2.2.3 中值滤波 2.2.4 双边滤波 三、形态转换 1、腐蚀 2、膨胀 3、开运算 4、闭运算 四、图像梯度 Sobel 和 Scharr …

【Pycharm系列】如何使用Windows的pycharm来远程连接linux做开发?

目录 前言一、原因二、步骤2-1、打开配置2-2、新建SFTP连接2-3、添加SSH连接信息2-4、配置连接信息2-5、构建连接2-6、打开远程项目文件目录2-7、配置项目依赖 总结 前言 使用Linux部署&#xff0c;使用Windows远程开发&#xff0c;可以提升开发效率&#xff0c;以及项目运行的…

使用可白嫖的高配置服务器——DAMODEL进行AI开发教程

DAMODEL&#xff1a;DAMODEL 目前DAmodel注册并实名赠送50大洋的免费额度&#xff0c;搭载4090的服务器费用不到2r/h 教程&#xff1a; 完成注册并实名后 在此点击创建实例 选择实例配置 选择镜像&#xff0c;看你使用哪种dl框架 。 实例自带的磁盘会随实例释放。需要自己…

Python获取盘符并创建文件夹-基于window系统

1、问题概述? 提供代码详解及完整应用代码 在项目开发中,我们有时候需要当前计算机的盘符,并判断那个盘符的空间最大,然后再最大空闲盘符中创建目录。实现如下功能 1、获取所有盘符信息。 2、获取盘符的空间,并判断大小 3、在盘符中创建需要的目录 …

osgEarth 键鼠 增删改 feature Node

为了满足shapefile 编辑&#xff0c;实现键鼠对地理要素的增删改。 读取shapefile&#xff0c;用Geometry Feature FeatureNode绘制在osgEarth上&#xff1b; 自定义osgGA::GUIEventHandler&#xff0c;handle函数中监测osgGA::GUIEventAdapter::PUSH 之前疑惑在拾取&#x…

已解决:“发生生成错误,是否继续并运行上次的成功的生成?”无法启动程序,系统找不到指定的文件

版本&#xff1a;Visual Studio 2022用于C开发 目录 问题描述 问题原因 解决办法 问题描述 代码没有问题&#xff0c;运行后出现如下界面&#xff1a; 点击“是”后&#xff0c;又出现如下问题&#xff1a; 问题原因 源程序文件下出现两个main函数。 像我的文件目录下的另…

Allegro PCB中过孔的整体替换

Cadence Allegro PCB中过孔的整体替换 在PCB设计过程中&#xff0c;之前是使用的小的过孔&#xff0c;后面需要替换成大的过孔&#xff0c;一个一个去替换过孔非常麻烦的&#xff0c;这里&#xff0c;讲解一下如何去整体的替换过孔&#xff0c;具体的操作方法如下所示&#xf…

微软推出最新 Azure 虚拟机 ND H200 v5 系列

声明&#xff1a;本文翻译自微软全球官方博客&#xff0c;ND H200 v5 系列虚拟机目前只在 Microsoft Azure 海外版上发布。 随着人工智能领域的高速发展&#xff0c;企业对于可扩展和高性能基础设施的需求呈指数级增长。客户需要 Azure AI 基础设施来开发智能驱动的创新解决方案…

HUAWEI_HCIA_实验指南_Lib2.1_交换机基础配置

1、原理概述 交换机之间通过以太网电接口对接时需要协商一些接口参数&#xff0c;比如速率、双工模式等。交换机的全双工是指交换机在发送数据的同时也能够接收数据&#xff0c;两者同时进行。就如平时打电话一样&#xff0c;说话的同时也能够听到对方的声音。而半双工指在同一…

Linux高性能服务器编程

文章目录 Linux高性能服务器编程一、TCP/IP协议族1.TCP/IP体系结构图2.ARP协议2.1 ARP协议工作原理2.2 以太网ARP请求/应答报文格式2.3 ARP高速缓存的查看与修改 3. DNS协议3.1 DNS 查询和应答报文 二、IP协议详解1.路由表更新 三、TCP1.特点2.字节流3.TCP头部结构4.三次握手与…

双卡双待功能

双卡功能&#xff0c;指的是设备上安装和使用了两张SIM卡的功能&#xff0c;这两张SIM卡可以来自同一运营商&#xff0c;也可以来自不同的运营商。设备可以选择使用其中一张SIM卡&#xff0c;或者两张同时使用。当然&#xff0c;能否两张SIM卡同时使用&#xff0c;还取决于设备…

Python 语言学习——做题记录 2.3

这次主要练习集合这一数据类型。 P1. 洛谷B3633集合运算2 import sys n1input() a1sys.stdin.readline() a2a1.split() A{int(i) for i in a2} #print(A) n2input() b1sys.stdin.readline() b2b1.split() B{int(i) for i in b2} #print(B)print(len(A)) CA&B DA|B Uset(ra…

全球化智能组网基于多技术混合组网,适用于各行业的全球办公组网

在全球化的今天&#xff0c;企业的业务网络不仅需要覆盖更广泛的地理区域&#xff0c;同时也要能够灵活应对各种复杂的业务场景。为此&#xff0c;中国联通国际公司推出了全球化智能组网服务&#xff0c;该服务以中国联通云联网为核心&#xff0c;结合SD-WAN、多云连接&#xf…

echarts图例右侧竖向排列修改图例文字颜色

实操链接戳这里哈 left代表图例在水平放置的位置&#xff0c;有left、center、right top代表图例在垂直方向的位置&#xff0c;有top、middle、bottom width是最主要的&#xff0c;当设置的宽度比较小时&#xff0c;才会迫使图例换行&#xff0c;从而形成竖直排列的现像。 lege…

SpringBoot2核心功能-数据访问

目录 一、数据源的自动配置-HikariDataSource1、导入JDBC场景2、分析自动配置3、修改配置项4、测试 二、使用Druid数据源2.1、druid官方github地址2.2、自定义方式2.2.1、创建数据源2.2.2、StatViewServlet2.2.3、StatFilter 2.3、使用官方starter方式2.3.1、引入druid-starter…