Day01 Uboot编译

news/2024/11/17 23:29:16/文章来源:https://www.cnblogs.com/lbx-cnblogs/p/18374861

一. 安装环境

  1. 安装依赖

sudo apt-get install gcc make cmake rsync wget unzip build-essential git bc swig libncurses5-dev libpython3-dev libssl-dev python3-distutils android-tools-mkbootimg -y

   2. 安装编译器

wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
sudo cp -r ./gcc-linaro-7.2.1-201711-x86_64_arm-linux-gnueabi /opt/
sudo vim /etc/bash.bashrc
// 添加路径
PATH="$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin"
// 路径生效
source /etc/bash.bashrc

二、 编译uboot

  1. 获取uboot

sudo apt-get install git
git clone https://gitee.com/LicheePiNano/u-boot.git
cd u-boot

# 查看分支
git branch -a
# 切换到 Nano 分支
git checkout nano-lcd800480

  2. 配置uboot

# 此处告知make采用arm-linux-gnueabi下的所有交叉编译工具,目标架构为Arm,设定各项默认配置为 nano 的spiflash支持版
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- f1c100s_nano_uboot_defconfig# 若不带spi-flash的板子,请换成 licheepi_nano_defconfig# 进行可视化配置
make ARCH=arm menuconfig# 配置Boot arguments(NEW)
console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 rw# 配置bootcmd value
load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb;load mmc 0:1 0x80008000 zImage;bootz 0x80008000 - 0x80C00000;

  3. 解决重定义

# 注释掉 BOOTCOMMAND
vim include/configs/suniv.h 

  4. 编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4

  5. 最后得到u-boot-sunxi-with-spl.bin

三、编译Linux

  1. 获取linux

git clone --depth=1 -b master https://gitee.com/LicheePiNano/Linux.gitmake ARCH=arm f1c100s_nano_linux_defconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4

  2. 编译完成后得到目标文件

内核img文件:./arch/arm/boot/zImage
设备树dtb文件:./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb

四、编译rootfs

  1. 获取rootfs

# 安装依赖
apt-get install linux-headers-$(uname -r)
wget https://buildroot.org/downloads/buildroot-2021.02.4.tar.gz
tar xvf buildroot-2021.02.4.tar.gz
cd buildroot-2021.02.4/
make menuconfig

 

五、制作SD启动

  1. SD分区

# 安装gparted分区工具
sudo apt-get install gparted

  2.  创建分区

# 如果有分区先卸载--》删除--》然后确认
# 创建第一分区BOOT
之前空余空间:1M
新大小:32M
文件系统:fat16(一定要是fat16)
卷标:BOOT# 创建第二分区rootfs
之前空余空间:0
新大小:200M
文件系统:ext4
卷标:rootfs

  3. 写入固件:

    1. 写入u-boot

# uboot起始地址从SDCard的8K偏移地址开始写
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdc bs=1024 seek=8
#写完以后一定要sync
sync

    2. 写入linux和dtb

# 将linux和设备写入到SDCard的第一分区BOOT分区
sudo mount /dev/sdb1 /mnt/
sudo cp zImage /mnt/
sync
sudo cp suniv-f1c100s-licheepi-nano.dtb  /mnt/ 
sync
sudo umount /dev/sdb1

  3.至此应该可以正常启动,将SDCard插入licheepi

   从面可以看到uboot正常启动,linux也可以启动了,但是找不到文件系统,因此这里挂载失败;

六、编译rootfs

  1. 获取buildroot

# 安装依赖
apt-get install linux-headers-$(uname -r)wget https://buildroot.org/downloads/buildroot-2021.02.4.tar.gz
tar xvf buildroot-2021.02.4.tar.gz
cd buildroot-2021.02.4/
make menuconfig

  2. 配置buildroot

 

 

 

参考:

  初见 - Sipeed Wiki

  

 

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维模型单体化软件:地理信息与遥感领域的精细化革命

在地理信息与遥感科学日新月异的发展浪潮中,单体化软件作为一股强大的驱动力,正引领着我们迈向空间信息处理与应用的新纪元。本文旨在深度解析单体化软件的核心价值、技术前沿、实践应用及面临的挑战,共同探讨这一技术如何塑造行业的未来。单体化软件:精细化时代的钥匙单体…

EasyExcel文档

源自官方文档,仅供我个人使用,其他人请移步官方地址:https://easyexcel.opensource.alibaba.com/,官方文档更详细更好!! 新手必读官方网站:https://easyexcel.opensource.alibaba.com/ github地址:https://github.com/alibaba/easyexcel gitee地址:https://gitee.com/…

在VS Code中使用Snippet Craft扩展提高编码效率

Snippet Craft 一个VS Code代码片段管理插件 功能 创建和插入代码片段 在编辑器区域右键菜单中点击插入Snippet,或在代码片段视图中点击条目,则会将代码片段插入到当前激活文档的光标位置。代码片段编辑 代码片段在左侧栏中,根据创建时的文件内容类型,分组显示代码片段,可…

cmake Makefile面试问题

摘自:https://wenku.baidu.com/view/4db705bdba0d6c85ec3a87c24028915f814d8462.html?_wkts_=1724332395577&bdQuery=cmake+%E9%9D%A2%E8%AF%95%E9%A2%98

Modern CMake 简介

摘自:https://zhuanlan.zhihu.com/p/76975231 Modern CMake 简介历史背景CMake是一个构建系统生成器(build-system generator)。常见的构建系统,有Visual Studio,XCode,Make等等。CMake可以支持不同平台下构建系统的生成。 CMake的出现已经有接近20年的历史,它的发展过程…

048、Vue3+TypeScript基础,基本的子页面和父页面相互通讯

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vueconst app = createApp(App);// App.vue的根元素id为app app.mount(#app)02、App.vue代码如下:<template><div class="app&…

1、拟合、预测、估算器、管道与模型评估

一、拟合和预测:估算器基础 1.1 资源导入、样本定义和训练from sklearn.ensemble import RandomForestClassifier #随机森林分类器 """ random_state=0 将使用固定的随机数种子(在这个例子中是0)来初始化随机数生成器。 这样,无论你的代码运行多少次,只要…

DDD精粹速读(一)

1 你需要知道的 - 战略设计 DDD是一种软件设计和构建方法,其重点在于独立于数据持久化等技术问题,准确表达业务规则。 不幸,DDD 对新手来说极具挑战性,部分原因是它有许多独特的概念需要学习。本文我简要介绍这些重要的思想,以便你能自信继续你的 DDD 旅程。 第一部分将侧…

消息队列作用(解耦、异步、削峰)

原文:消息队列作用(解耦、异步、削峰)图详解一、消息队列简介 简单来说,“消息队列”是在消息的传输过程中保存消息的容器。MQ 全称为 Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信。 消…

C++ 链表

1. 前言 链表:不仅存储 当前元素的数据,还存储着 元素排列顺序 2. 正题 2.1 如何存储节点? 我们可以使用 结构体 数组来存储 链表节点 struct Node {int val; // 可以是 string 或其它复杂的类型int nxt; } node[N];Tip: 下标顺序不是单链表顺序val 代表 元素本身,nxt 代表…

WPF 模拟UWP原生窗口样式——亚克力|云母材质、自定义标题栏样式、原生DWM动画 (附我封装好的类)

先看一下最终效果,左图为使用亚克力材质并添加组合颜色的效果;右图为MicaAlt材质的效果。两者都自定义了标题栏并且最大限度地保留了DWM提供的原生窗口效果(最大化最小化、关闭出现的动画、窗口阴影、拖拽布局器等)。接下来把各部分的实现一个个拆开来讲讲。 一、使用窗口材…

Redis学习(一)

1.通用命令keys * del k1 exists k1 expipe k1 ttl k12.String类型String类型的常见命令 set k1 v1 添加键值对 get k1 v1 获得键值对对应的值 mset k1 v1 k2 v2 一次性设置多个值 mget k1 k2 k3 一次性获取多个键值对的值 incr k1 让k1自增 incrby k1 2 按步长2自增 dec…