编译内核的相关知识

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(使用前将#替换为@)

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

随机推荐

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

    前言 一块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