网络环境搭建及uboot配置

网络环境搭建

搭建网络环境可以搭建公网的也可以搭建局域网的,这里搭建的是局域网的。

详细看实验手册第一个实验 系统移植实验手册

linux内核的安装与加载

        这一章节主要分为两大块:一个为产品阶段即:Linux内核、根文件系统、uboot全部存储到硬盘内,另一个为研发阶段,研发阶段因为需要反复调试,所以需要我们把跟文件系统放到NFS内使用共享的方式,Linux内核放到tftp下进行传输,uboot最好使用SD卡的方式。

详情见实验手册中实验五 系统移植实验手册

Uboot移植(源码结构、配置、编译)

uboot源码结构

uboot源码获取

1. uboot官网获取

 ftp://ftp.denx.de/pub/u-boot/

2. 芯片厂家获取 

3. 开发板厂家  ---》目前市面上的6818的开发板,开发板厂家只提供u-boot.bin 

4. 上级主管   ---》推荐

本次移植课程使用:u-boot-2014.07-netok.tar.bz2

uboot版本命名

前期:u-boot-1.3.2

现在:u-boot-2024.01

08年以前uboot是1.1.几1.3.几这样命名08年开始以年份和月份命名。

uboot版本选择

支持对应的硬件平台

相对成熟的版本(资料多)

每当发布新的芯片后uboot就会增加对应芯片的版本。一般和处理器同一时期发布的uboot版本对处理器的支持较好。

uboot的特点

1. u-boot是一个开源的软件

2. u-boot支持多种架构的平台(ARM  powerPC  MIPS x86)

3. u-boot的源码短小精悍

4. u-boot就是一个裸机代码

5. u-boot引导加载内核,启动内核,并给内核传递参数

6. u-boot可以完成部分硬件的初始化:uart,内存,emmc,网卡

7. u-boot生命周期短,启动完内核,给内核传递完参数(告诉内核从什么地方去挂载根文件系统),u-boot的生命周期结束。

uboot源码结构

uboot移植

由于uboot的源码特别多所以是由很多个文件夹组成的,同类型的源码放到一个文件夹里

平台相关代码

即与CPU架构或开发板硬件相关的源码,硬件的改动对应的代码也需要进行修改

api:这个目录下有很多的用户接口 

arch与CPU架构相关的源代码

board与开发板相关的源代码,包含各种官方评估板对应的源码

boards.cfg这个文件是配置信息

common:这下面全是uboot命令的.c文件

config.mk也是一个配置文件

COPYING这是版权文件虽然是开源软件但是也不能乱用

CREDITS这里是代码贡献者名单包括他们的邮箱

disk:磁盘操作的命令文件夹

doc:这里是详细的说明书

drivers:这里面全是驱动文件 

dts:设备树文件夹,后面学习驱动时在详细学习。

examples:里面是例程,在不会写的时候可以参考一下

fs:文件系统,这里面每个文件夹内都是文件系统的源代码和makefile文件这里面ext4是嵌入式领域常用的文件系统。

include:这里是头文件

lib:这里是库

makefile:方便我们编译uboot镜像。它这个makefile是层层调用的每个文件夹下都有,使用make命令后总的makefile文件会调用每层的马克file文件来共同编译出uboot镜像

net:网络文件夹,这里面是uboot支持的一些网络

post:上电自检程序

README:一个说明书或者说帮助文档,这个说明书有5000多行都是一些介绍性的的东西。

tools:工具

移植前的准备工作

获取基本的硬件信息

cpu(内核):cortex-a53

arch:armV8

vendor:samsung

SoC:S5P6818

board(公板): S5P6818 

公板:芯片厂家根据芯片设计的一套参考电路板

NEXELL:韩国一个芯片生成厂家,三星将S5P6818芯片授权给NEXELL

移植uboot 

根据此手册的步骤进行执行uboot移植

uboot配置与编译

为了保证uboot适用所有开发板,uboot把所有的开发板都写出来了,需要哪个编译哪个

uboot配置

1.指定当前使用的硬件平台

   make <board_name>_config(咱们用的是make fs6818_config)

  注1:<board_name>为当前使用的开发板的名字

  注2:执行该命令的前提是uboot源码支持该开发板

  注3:该命令必须在uboot源码的顶层目录下执行

/home/hq/bootloader/u-boot-2014.07-6818/mkconfig -A fs6818
Configuring for fs6818 board...

2.指定编译uboot源码使用的编译器

  将以下内容(咱们使用的源码是改过的,但是要知道这个流程)

198 ifeq ($(HOSTARCH),$(ARCH))
199 CROSS_COMPILE ?=                                      
200 endif

修改为

198 ifeq (arm,arm)
199 CROSS_COMPILE ?= arm-none-linux-gnueabi- 
200 endif

uboot编译

1.编译uboot

make   / make all(编译的时间比较长)

  注1:该命令必须在uboot源码的顶层目录下执行

  注2:该命令执行后在uboot源码顶层目录下生成u-boot.bin

 编译需要大概一分钟。编译完多了几个文件,多了一个system.map文件和那些u-boot开头的。

make在编译的过程中先将.c和.s编译成.o文件。最后把他们链接(ld)成一个可执行文件绿色的那个u-boot。他是elf格式的。我们肯定不能把他刷到板子上。不过在这之后它还会用objcopy把利用elf文件生成bin文件。这里还有一个srec文件这是符合摩托罗拉的二进制文件。

2.清除编译过程中生成的中间文件

  make clean

  make distclean

  注1:该命令必须在uboot源码的顶层目录下执行

这些中间文件就是.o文件。执行make clean只是清除这些.o文件。执行distclean会把生成的可执行文件和二进制文件也删除。恢复刚下载的源码状态。

编译问题解决

Make的时候可能出现上面问题,出现上面问题,如下方法解决:

总结

编译生成ubootpak.bin的步骤

  1. 修改源码
  2. 配置编译器------》修改Makefile中的编译器
  3. make clean------》清除
  4. make  fs6818_config---------》支持开发板
  5. make -------->编译生成ubootpak.bin
  6. ubootpak.bin 下载到开发板(使用tftp服务)

uboot代码分析

u_boot分析-s5p6818

Linux内核移植

Linux内核概述

内核与操作系统

内核

内核是一个操作系统的核心,提供了操作系统最基本的功能,是操作系统工作的基础,决定着整个系统的性能和稳定性

操作系统

操作系统是在内核的基础上添加了各种工具集、桌面管理器、库、shell、应用程序等(我们使用的网络协议都是基于TCP/IP或者UDP/IP协议开发的)(我们使用rm、mv、cp。。。这些命令都不是内核提供的)

shell翻译过来就是贝壳,他把内核很好的保护了起来。Linux内核内有文件管理系统。所以可以操作磁盘。那现在我们要操作一些文件就需要去操作内核让内核再去操作文件。但是内核很复杂,我们时候一个误操作可能就会把内核搞坏了。所以我们操作shell让shell再去操作内核就会很安全了。

库这些lib也不是内核包含的。

图形化界面也不属于内核,内核本身只支持大黑框

Linux层次结构

进程管理、内存管理、文件管理、设备管理、网络管理

Linux内核的特点

1》linux内核源码开源

2》linux支持多种架构平台  arm  x86(手机和Ubuntu都使用的是Linux内核)

3》linux内核代码采用模块化的方式(模块化—》把功能独立处理 安全性比较高)

4》linux内核代码采用分层的思想

5》linux内核源码具有良好的移植特性和裁剪特性

6》linux内核源码都是使用汇编和c语言实现的

Linux内核源码结构

Linux内核源码获取

The Linux Kernel Archives

1》可以从linux内核官方获取

Index of /pub/linux/kernel/

2》从芯片厂家获取

3》从开发板厂家获取

4》从技术主管获取 --》推荐

Linux内核版本命名

linux-主版本号.次版本号.修订版本号.tar.xz 

主版本号:内核源码有较大跟新,才会升级主版本号

次版本号:

次版本号为偶数:表示稳定版本

次版本号为奇数:表示测试版本

修订版本号:内核源码中只要有代码更新就会,

升级修订版本号

Linux内核版本选择

1》不可以太新

2》不可以太旧

3》选择稳定版本

三星公司没有对S5P6818的源码,开源到Linux内核中,所以不能从官网下载linux内核源码,使用samsung提供的内核源码。

本课程使用的内核源码为:kernel-3.4.39-ok.tar.xz

内核源码结构

把源码拖到ubuntu里解压

在ubuntu的家目录下创建kernel文件夹

将内核源码压缩包拷贝到kernel文件夹中

对内核源码进行解压缩

tar -vxf kernel-3.4.39-ok.tar.xz

进入到内核源码目录中,分析内核源码的目录结构

cd kernel-3.4.39

ls 

平台相关代码

arch:  与CPU架构相关的源代码 (跟硬件有关的,代码不可以共享

block:磁盘设备的支持  

crypto:加密相关

drivers:设备驱动  

firmware:固件

fs:文件系统  

include:头文件

一般格式化磁盘都格式化成ntfs

init:内核初始化

ipc:进程间通信(共享内存消息队列什么的都是再ipc目录下实现的)

kernel:内核核心调度机制等  

lib:库   内核的核心算法。 

mm:内存管理  net:网络协议

scripts:工具、脚本等  

security:安全

usr:打包与压缩

virt:虚拟

COPYING:  版权  gpl版权,GNU开源协议

CREDITS:  内核贡献者

README:  说明文档

Documentation:  帮助文档

Makefile:  编译管理

samples:  示例

tools:  工具

Kconfig:内核自带的图形化界面

    ... ...

Linux内核源码的配置和编译

根据文档进行操作  Linux内核源码的配置和编译

Makefile .config  Kconfig文件之间的关系 ?

Makefile:指导内核进行编译

.config:存放的是内核的配置的信息+硬件

Kconfig:存放菜单选项

执行make fs6818_defconfig命令,根据fs6818_config文件和Kconfig文件中的配置信息生成.config文件 

make menuconfig 执行时根据Kconfig生成菜单的图形化界面。如果根据菜单图形化界面进行配置之后,会更新.config文件 

Makefile文件根据.config文件中的信息,决定将那些文件编译到uIamge中,那些不编译到uImage中。

可以根据实验去理解三者的关系    驱动移植

实验

将led灯的驱动编译到内核和编译成模块步骤

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

董宇辉“小作文事件”:东方甄选的危机与挑战

导言 近期&#xff0c;东方甄选公司的创始人董宇辉因涉及“小作文事件”而引起轩然大波。东方甄选作为一家在招聘领域崭露头角的公司&#xff0c;经历了充满曲折的发展历程。本文将深入探讨这一事件对东方甄选公司的发展带来的危机和挑战&#xff0c;以及公司可能采取的解决策略…

AI绘画中UNet用于预测噪声

介绍 在AI绘画领域中&#xff0c;UNet是一种常见的神经网络架构&#xff0c;广泛用于图像相关的任务&#xff0c;尤其是在图像分割领域中表现突出。UNet最初是为了解决医学图像分割问题而设计的&#xff0c;但其应用已经扩展到了多种图像处理任务。 特点 对称结构&#xff1a…

详细教程 - 从零开发 鸿蒙harmonyOS应用 第九节-——鸿蒙操作系统中的自定义视图封装:一次奇妙的旅程

一、简介 自定义视图是开发鸿蒙应用时的一个重要功能。在这篇文章中&#xff0c;我们将详细探讨如何在鸿蒙系统中实现自定义视图的封装&#xff0c;并提供一些代码示例作为你的地图。 二、自定义视图的实现 在鸿蒙操作系统中&#xff0c;我们可以通过继承ohos.agp.components.…

【Hadoop】HDFS的体系架构

整体上说HDFS框架结构一HDFS框架结构二&#xff08;HDFS High Availability&#xff09; 整体上说 HDFS 采用 Master/Slave 架构。一个 HDFS 集群是由一个 NameNode 和一定数目的 DataNodes组成。其中 NameNode 是一个中心服务器&#xff0c;负责文件系统的名字空间(namespace…

【Docker】Docker安装部署maven私服

文章目录 镜像拉取构建nexus实例登录maven私服如何查看实例初始化的admin密码呢&#xff1f;1.查看容器挂载卷2.找到nexus_nexus_data查看挂载卷详情3.查看admin账号密码4.登录并重置密码 使用nexus私服1.设置settings.xml2.设置idea pom 出现的问题小插曲 镜像拉取 docker pu…

DVWA靶场的设置

1).在win 10系统安phpstudy2016&#xff0c;如图所示 2&#xff09;创建DVWA的靶场&#xff0c;解压DVWA-master.zip到C:\phpStudy\WWW\DWA-master 3&#xff09;配置DVWA链接数据库 右键选择记事本打开configlconfig.inc.php.dist【也可以使⽤其他编辑⼯具打开】&#xff0c;…

react基于antd二次封装spin组件

目录 react基于antd二次封装spin组件组件使用组件效果 react基于antd二次封装spin组件 组件 import { Spin } from antd; import propTypes from "prop-types"; import React from react; import styleId from "styled-components"; // 使用 父div必须加…

【vtkWidgetRepresentation】第十四期 二维标注

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtk中的二维标注,主要用于医学领域,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. vtkBiDimension…

LVS-DR部署

目录 LVS的工作模式及其工作过程 NAT模式&#xff08;VS-NAT&#xff09; 直接路由模式&#xff08;VS-DR&#xff09; IP隧道模式&#xff08;VS-TUN&#xff09; DR模式 LVS负载均衡群集的分析及特点 数据包流向分析 DR 模式的特点 LVS-DR部署实例 LVS-DR模式部署流…

主从reactor多线程实现

现场模型图片&#xff0c;从网上找的 出于学习的目的实现的&#xff0c;如有不对的地方欢迎留言知道&#xff0c;简单实现了http的请求&#xff0c;可通过postman进行访问 启动项目&#xff1a; 返回数据示例 postman请求 附上源码&#xff0c;有问题直接看源码吧

TensorFlow 2 和 Keras 之间的区别总结

1、什么是TensorFlow 2 TensorFlow 2是谷歌开源的一款深度学习框架&#xff0c;于2019年发布&#xff0c;并且在同年10月1日发布了TensorFlow 2.0.0正式稳定版。这款框架被很多企业与创业公司广泛用于自动化工作任务和开发新系统。 TensorFlow 2在分布式训练支持、可扩展的生…

Linux-----21、挂载

# 挂载命令 将硬件资源&#xff0c;或文件资源&#x1f4bf;&#xff0c;和&#x1f4c2;空目录&#x1f517;连接起来的过程 # mount linux 所有存储设备都必须挂载使用&#xff0c;包括硬盘 ​ 命令名称&#xff1a;mount ​ 命令所在路径&#xff1a;/bin/mount ​ 执行…

PIC单片机项目(4)——基于PIC16F877A的温度光照检测装置

1.功能设计 基于PIC16F877A单片机&#xff0c;使用DS18B20进行温度测量&#xff0c;使用光敏电阻进行光照测量&#xff0c;将测量值实时显示在LCD1602屏幕上&#xff0c;同时可以设定光照阈值和温度阈值。当温度大于阈值&#xff0c;则蜂鸣器报警&#xff0c;当光照小于阈值&am…

【分布式算法】Gossip协议详解

一、为什么需要 Gossip 协议&#xff1f; 为了实现 BASE 理论中的“最终一致性原则”。两阶段提交协议和 Raft 算法需要满足“大多数服务节点正常运行”原则&#xff0c;如果希望系统在少数服务节点正常运行的情况下&#xff0c;仍能对外提供稳定服务&#xff0c;这时就需要实…

RabbitMQ入门指南(二):架构和管理控制台的使用

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、RabbitMQ架构 二、RabbitMQ管理控制台的使用 1.Exchange交换机 2.Queue队列 3.绑定Exchange交换机和Queue队列 4.发送消息 5.数据隔离 总结 前言 RabbitMQ是一个高效、可靠的开源消息队列系统…

HTML_CSS的基本选择器的使用及其作用范围和优先级

目录 ✨CSS的使用&#xff1a;行内样式内部样式外部样式 ✨CSS基本选择器&#xff1a;id选择器class选择器标签选择器 ✨优先级&#xff1a;选择器的优先级样式表的优先级 ✨CSS的使用&#xff1a; 根据定义CSS的位置不同&#xff0c;分为行内样式、内部样式和外部样式 行内样…

鸿蒙OS:打破界限的操作系统新星

导言 鸿蒙OS&#xff08;HarmonyOS&#xff09;是华为公司为应对技术封锁而推出的分布式操作系统&#xff0c;其背后蕴含着华为构建全球数字生活愿景的雄心。本文将深入剖析鸿蒙OS的起源、核心特性&#xff0c;并展望其未来在数字生态中的角色。 1. 背景与起源 华为的…

[自动化运维工具]ansible简单介绍和常用模块

ansible 源操作主机功能 自动化运维&#xff08;playbook剧本yaml&#xff09; 是基于python开发的一个配置管理和应用部署工具&#xff0c;在自动化运维中&#xff0c;现在还是异军突起 ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c;类似于xshell…

其他配置相关安装

consul安装和配置 docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul consul agent -dev -client0.0.0.0访问&#xff1a;http://192.168.0.102:8500/ DNS查询 dig 192.168.0.102 -p 8600 consul.service.consul SRVnacos安装 ht…

音视频技术开发周刊 | 324

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 467亿参数MoE追平GPT-3.5&#xff01;爆火开源Mixtral模型细节首公开&#xff0c;中杯逼近GPT-4 今天&#xff0c;Mistral AI公布了Mixtral 8x7B的技术细节&#xff0c;不…