编译内核的相关知识

2023-11-11

1,在PC端搭建环境。(ubantu)
2,树莓派等芯片带操作系统的启动过程
C51,STM32(裸机)用C直接操控底层寄存器实现相关业务。 业务流程型的裸机代码。
3,带有操作系统的(X86,intel,windows)
启动过程:电源->bios芯片->windows内核->C,D盘->启动程序
嵌入式产品:树莓派,mini2440,mini6410,nanopi,海思,RK(瑞芯微)
启动过程: 电源-》BootLoader(引导操作系统启动)-》Linux内核-》文件系统(根据功能性来组织文件夹,带访问权限)-》KTV点歌机。
安卓
启动过程: 电源-》 fastBoot/Bootloader/-》linux内核-》文件系统-》虚拟机-》HOME应用程序-》点某图标打开某APP
BootLoader:
一阶段 让CPU 跟内存,FLASH, 串口,IIC,IIS, 数据段,打交道,驱动这些设备(汇编和C结合)
二阶段: 引导Linux内核启动 (纯C)
4,linux下的设备树
安装设备树:sudo apt-get install tree
在这里插入图片描述
说明了各个文件夹的作用的网址

https://www.cnblogs.com/senior-engineer/p/4929703.html

5,驱动代码的编写
驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核。
第一种方式:
cp 厂家.config .config
第二种方式:
make menuconfig 一项项配置,通常是基于厂家的config来配置
第三种方式:自己配置所有东西。
6,如何配置树莓派的Linux内核
在配置前需要安装各个依赖库通常在生成.config文件时没有库会报错。
驱动两种加载方式:
符号* 编译进内核 zImage包含了驱动
符号M 模块方式生成驱动文件xxx.ko 系统启动后,通过命令insmod xxx.ko 加载
内核配置:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
ARCH=arm: 指定ARM架构
CROSS_COMPILE=指定编译器 主要树莓派:arm-linux-gnueabihf- KERNEL=kernel7
主要核心指令: make bcm2709_defconfig

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig//将厂家的configure编译成.config

配置内核指令

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

如图:在这里插入图片描述
7,配置好后我们进行内核编译
7.1编译命令

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

-j4 使用多少资源编译
zImage生成镜像
modules生成的驱动模块(树莓派独有)
dtbs生成的配置文件(树莓派独有)

编译成功后,看到源码树目录多了vmlinux,失败则无此文件。成功后,目标zImage镜像在arch/arm/boot底下。
7.2打包zImage成树莓派可用的xxx.img

把生成的镜像zImage打包成kernel_new.img命令

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

7.3内核移植
将内存卡插入PC上

“dmesg”命令当插入设备到Linux系统里,使用该命令会打印设备信息

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

安装modules, 设备驱动文件: hdmi usb wifi io …

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/用户名/data2 modules_install

安装更新 kernel.img 文件,注意镜像名字是kernel7.img直接拷贝到data1下面的文件下替换原来的kernel7.img

cp kernel_new.img/home/chenlc/data1 /kernel7.img

最后拷贝配置文件到data1中的相应目录中

cp arch/arm/boot/dts/.*dtb* /home/lx/data1
sudo cp arch/arm/boot/dts/overlays/.*dtb* /home/lx/data1/overlays/
sudo cp arch/arm/boot/dts/overlays/README /home/lx/data1/overlays/

最后通过串口来看是否移植成功,进入树莓派后uname -r查看成功没。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译内核的相关知识 的相关文章

  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • 从 ttyUSB0 写入和读取,无法得到响应

    我对 Linux tty 不太有经验 我的环境是带有丰富 USB 串行的 Raspbian 什么有效 stty F dev ttyUSB0 38400 cu l dev ttyUSB0 s 38400 cu to dev ttyUSB0作品
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读

随机推荐

  • 利用稳压模块设计电源电路(洞洞板手工做板)

    前言 一块12伏的电池 要进行分压以适应多路的供电要求 因此做电源电路很有必要 本文采用洞洞板 稳压模块 手工焊接 1 实物 2 原理图 3 焊接 用焊锡连线 而不是用杜邦线跳线 焊锡线粗 可以保证大电流通过 而杜邦线太细了 容易烧毁 更甚
  • feign.FeignException$Unauthorized: status 401 reading UserOpenFeignService#findUser

    feign FeignException Unauthorized status 401 reading UserOpenFeignService findUser 如果是pig那边的问题 可以关了 文章针对的是单纯feign调用的问题 出
  • matlab自动深复制(deep copy)

    matlab 程序中 多次重复实验 而每次重复中会对数据 X 加一些随机噪声 此处希望每次重复时深复制一次 X 使得本次的噪声不会影响原数据 matlab 似乎能自动决定要不要复制一份 测试如下 Code matlab R2018a 原数据
  • 深入剖析智能仓储管理(WMS)应用价值与应用场景

    中国企业都在思考和部署如何实现一种高度自动化 高度信息化 高度网络化的生产模式 从而实现基于大数据的用户全息深层分析 本文目的在于交流如何建设适合自己企业的智能仓储 文 供应链指南针 孙亚博 2013年德国提出第四次工业革命 工业4 0的兴
  • linux开机自启动脚本以及update-rc.d命令解析

    linux有很多种自启动方式 这里只是简单记录下update rc d的自启动方式 update rc d的介绍 update rc d命令用于安装或移除System V风格的初始化脚本连接 脚本是存放在 etc init d 目录下的 我
  • HashSet详解

    概述 HashSet也是一个使用频率非常高的一个集合容器 最大的特点是存储的元素是没有重复的 而且是无序的 那么对于HashSet是如何判断原始是否重复 底层又是怎么实现的 你了解吗 HashSet介绍 HashSet 基于 HashMap
  • git-常见问题解决方法(全)

    git使用过程中遇到的问题解决方法记录 问题 1 更新代码后显示 unable to unlink old xxx xxx xx invalid argument 问题原因 要提交或更新的文件被系统线程占用 解决方法 把相关服务暂停 重新p
  • PDF文件如何转成markdown格式

    百度上根据pdf转makrdown为关键字进行搜索 结果大多数是反过来的转换 即markdown文本转PDF格式 但是PDF转markdown的解决方案很少 正好我工作上有这个需求 所以自己实现了一个解决方案 下图是一个用PDF XChan
  • 微前端的出现的背景和意义

    目录 微前端是什么 大规模 Web 应用的困局 传统 Web 应用的利与弊 背景和意义总结 微前端是什么 微前端是一种类似于微服务的架构 是一种由独立交付的多个前端应用组成整体的架构风格 将前端应用分解成一些更小 更简单的能够独立开发 测试
  • mysql删除一行_MySql删除表中一行的实操方法

    MySql删除表中一行的实操方法 首先你要确定能够唯一确定你那一行数据的字段或字段组合是哪些 DELETE FROM 表名 WHERE 字段1 and 字段2 and 字段1 为能够唯一确定某一行数据的字段组合 中填写你要 删除的字段具体值
  • Unity-ScrollRect-循环播放图片(确实没有转载是真的)

    都在代码和代码注释里了 发表在这里我还是有私心想要问问题的 是因为自己在使用时发现 Unity会调用两次通过继承来的PictureScrollView的Start函数两次 我并不能想明白是怎么回事 还请有了解的指点一下 先谢谢能给我指点的各
  • 【好文分享】亲试可行!简单快捷!如何在Ubuntu上编译Linux0.11

    2023年9月10日 周日上午 昨天晚上按照博客园的这篇文章试了一下 很快就成功在Ubuntu上编译运行了Linux0 11 https www cnblogs com chaoguo1234 p 16883932 html
  • linux redhat6.5 64位 login登陆无限循环

    场景 公司VC上虚机要迁移 通过拷贝vmfs文件方式迁移 开机后 发现无法登陆 一开始怀疑密码有问题 后来排除 然后网上搜索要修改 etc pam d login里边的参数 64位系统将 lib security pam limits so
  • Eclipse 报错: “Workspace in use or cannot be created, chose a different one.”

    打开eclipse报错 Workspace in use or cannot be created chose a different one 意识是 正在使用或无法创建工作区 选择另一个 解决办法 找到你eclipse得工作区 打开 me
  • C++ typeid运算符:获取类型信息

    typeid 运算符用来获取一个表达式的类型信息 类型信息对于编程语言非常重要 它描述了数据的各种属性 对于基本类型 int float 等C 内置类型 的数据 类型信息所包含的内容比较简单 主要是指数据的类型 对于类类型的数据 也就是对象
  • vue2和vue3 父子组件传参及区别

    vue3 1 父组件传子组件 在父组件的子组件标签中定义一个属性 在子组件中用defineProps接收父组件传来的值 父组件
  • python读取excle表中的数据

    没什么可介绍的 直接看代码 import pandas as pd from pandas import DataFrame if name main 读取excle表中的数据 file path r D ex Concrete Data
  • 从零搭建一个vue项目

    为了几个姐妹的需求 本文详细图解怎么样从零搭建一个vue项目 供参考 第一步 了解工具 首先我们需要一些工具 比如npm nodejs vue cli 和一个编译器vscode 也可以用别的 这里用vscode作为开发工具演示 第二步 检查
  • VMware虚拟机首次安装centos7.15后配置网络和关闭防火墙

    听了朋友的意见打算学下linux 学习当然是从安装开始了 网上找了个最新版的边看教程边装 网上看了好几个不同的教程 安装的时候还不难 都比较详细 但配置网络时都说的不太清楚 毕竟我没什么基础 如果不说清楚的话 很多地方我也不太懂 看了很多个
  • 编译内核的相关知识

    1 在PC端搭建环境 ubantu 2 树莓派等芯片带操作系统的启动过程 C51 STM32 裸机 用C直接操控底层寄存器实现相关业务 业务流程型的裸机代码 3 带有操作系统的 X86 intel windows 启动过程 电源 gt bi