Linux内核的安装与加载

news2024/11/13 9:18:17

目录

一、tftp加载Linux内核和roootfs

二、 EMMC加载Linux内核和rootfs

三、tftp加载Linux内核nfs挂在根文件系统

四、EMMC加载uboot


一、tftp加载Linux内核和roootfs

这个就是Linux内核,它很轻量级只有2.949MB所以在嵌入式领域很受欢迎。

上面那个就是设备树文件

 把这两个文件放进来然后chmod 777 ,这个和版本有关老版本16以前只要这个文件夹是777拖进来就变成777了。我这个18.04就不行,需要在赋予权限,但是不需要sudo。有的还要加sudo。

 

然后拖入这个,这是根文件系统。

如果虚拟机重启了需要将tftp服务重启不然是不好使的,我因为以前搞了一段时间大数据所以我习惯挂起,嘎嘎好用。

连接开发板与电脑,在 uboot 交互模式下,设置 uboot 的启动参数

# setenv ipaddr ***.***.***.***

# setenv serverip xxx.xxx.xxx.xxx

# setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;tftp 0x43000000 ramdisk.img\;bootm 0x41000000 0x43000000 0x42000000

# setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs/ rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***

 由于内存条只安了一个G所以最好在40000000~80000000

 

 

 所以这一块是16MB每块放一样绰绰有余。

bootm(内核启动命令)

    启动指定内存地址上的Linux内核并为内核传递参数

  bootm kernel-addr ramdisk-addr dtb-addr

  注:

      kernel-addr:  内核的下载地址 

      ramdisk-addr:  根文件系统的下载地址   

      dtb-addr:  设备树的下载地址

      若不使用相应的地址,对应的位置写“-”

  eg:

      bootm 0x41000000 - 0x42000000

 

 

bootargs(u-boot自启动参数环境变量设置)

    eg:

    setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs     

    rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***

    注:

  root  根文件系统类型(nfs)

  nfsroot  网络文件系统路径(xxx.xxx.xxx.xxx:/opt/4412/rootfs)

  rw        操作网络文件系统的权限(rw)

  console  控制台(使用串口2,波特率115200)

  init          init进程的位置(/linuxrc)

  ip            linux启动后自身的IP(***.***.***.***)

现在重新启动开发板

额经过我的检查原来是敲错了,尴尬

,希望这次没错。 

 我好像发现了盲点,我用emmc启动的。十分之尴尬啊,现在切换成SD卡重新配置一下

GG致命错误多敲一个0下载到1000 0000了

 

终于成功了,看这亲切的ls

 纯白色看着不舒服

这里可以切换主题,我用Linux这个大黑屏挺好用的

据我观察干咱们这行的基本都喜欢黑色背景,主要熬夜敲代码还是黑色能舒服点,习惯以后白天也想用。 

注意:如果ping不通记得关闭防火墙。

二、 EMMC加载Linux内核和rootfs

emmc是分块的

上面算了一下:

uImage是2.9M

我的计算器太垃圾了算不了小数点。我看下这个uImage是2949K

 

 

 5940块切换成16进制,因为之前我们说过默认是16进制的。

 设备树是36k,乘以1024在除以512,就是72块。所以现在emmc就是这个情况,最前面的800块用来放u-boot。我懒下面这个图复制老师的哈哈。

 emmc有4个G后面可以存一些APP什么的随便玩

然后我们开始敲命令

先用tftp把内核下载到内存,在把内核放到emmc里

 下载设备树然后放到emmc。由于不是直接用内存所以下载到一个地址也没事覆盖了就覆盖了。

最后是根文件系统

---------------------------------------------------------------------------------------------------------------------------------

我刚刚写错地址的时候下载到1000 0000了找了一下exynos4412的地址映射表这块是SFR寄存器,希望没事,不过应该没事,寄存器有的能写有的只读应该是写到只读的寄存器卡住了,那些可写的到时候用之前都要设置,所以应该问题不大那就继续。

---------------------------------------------------------------------------------------------------------------------------------

 

 设置u-boot启动参数,好像太长了

把后面的参数用单引号引起来试试

好像还是不行捏。

我刚刚是在emmc启动下配置的这个长度限制好像破除不了,现在有改成SD卡启动加上单引号就可以了。

这次貌似可以了

现在可以用SD卡不借助tftp启动了。然后我把启动模式换成emmc

看来这个saveenv保存的地方是根据使用的uboot位置定的emmc里的uboot没改良过不接受单引号也许。算了等往后学一学看看能不能解决这个问题。

三、tftp加载Linux内核nfs挂在根文件系统

这种方式适合开发,因为要经常修改系统,所以改一次刷一次emmc太浪费时间了。

解压根文件系统

由于这次跟文件系统是通过nfs挂载的所以就不需要写内存地址了,同样也没有内存地址。所以写个-

重启一下nfs服务

卡在挂在根文件系统了,大概是nfs的问题

 路径有点问题之前的路径是到book这次具体到nfs_rootfs试试。

给文件夹777了这次在试试

还是卡在挂载根文件系统

这次全部文件777

 还是不行

VFS: Cannot open root device 解决思路___pop_的博客-CSDN博客

 感觉这个兄台写的思路很对

查了半天老师出马我敲错一个字母顺便又学了N遍nfs补一下nfs配置文件里这个参数说明

下面这段引自外站侵权我就删了。

---------------------------------------------------------------------------------------------------------------------------------

 https://www.ngui.cc/zz/188328.html?action=onClick

---------------------------------------------------------------------------------------------------------------------------------

 

 

 在虚拟机中写一个这样的程序:

 

 

呕吼不行为什么呢,因为机器码不行啊。

 gcc编译出来的X86的机器码

 我测试了一下很多东西开发板都用不了,因为我们之前配置的东西都在我们的虚拟机中,我们开发板有的只是根文件系统里这些东西。我们之前安过ARM-gcc在虚拟机中编译在开发板中运行试试

 

 好吧file命令开发板就是用不了,但是这个arm架构的hello可执行文件可以。以后就可以在虚拟机写程序和编译开发板执行就行了。

bootargs刚刚就是这个敲错了,这个虽然是uboot的环境变量,但是它是uboot传给内核的参数。

四、EMMC加载uboot

这次就是要彻底脱离SD卡,希望不会敲错。

先把uboot镜像放到tftp文件夹里并给他权限。 

uboot要刷到emmc的引导分区所以我们要运行一个命令打开分区

用SD卡启动默认从第一块开始搬移uboot

用emmc启动默认从第零块开始搬移uboot

 516*1024/512=1032块

一块512字节

转成16进制是408块所以大于408就行

之后我们重新设置一下uboot重启就行

一个root命令

 

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

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

相关文章

初识 Python 科学计算库之 NumPy(创建多维数组对象)

文章目录参考描述NumPy特点获取导入多维数组对象np.array()np.asarray()范围随机概览np.random.randn()np.random.normal()np.random.choice()np.random.random()np.random.randint()np.random.shuffle()np.random.seed()数列等差数列等比数列填充np.zeros()np.zeros_like()np.…

Spotify Q4用户增长再超预期,但为何还是赚不到钱?

2022年,美联储接连7次暴力加息,科技行业整体低迷,从Meta、Google再到亚马逊,大型科技公司接连宣告裁员过冬。 寒气已经传递到了更广阔的地方。1月下旬,瑞典音乐流媒体巨头Spotify宣布将裁员6%。 音乐流媒体的生意变得…

Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求,JSON判断登录是否成功

Python接口项目实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求,JSON判断登录是否成功实现功能描述1.首先获取到接口谷歌浏览器中获取接口信息fiddler里面抓取接口信息2.创建一个xlsx文档3.导入我…

【C++】继承详解

目录继承的概念及定义继承的概念继承的定义定义格式继承关系和访问限定符继承基类成员访问方式的变化基类和派生类对象的赋值转换继承中的作用域派生类的默认成员函数继承和友元继承与静态成员复杂的菱形继承及菱形的虚拟继承菱形继承的概念虚拟继承**虚拟继承的原理**&#xf…

IT6512可编程直流电源的工作原理

现在各种的电子设备不断的发展,它们对直流供电的电源也有了更高的要求,相对于电子设备来说,用单一的直流电源是没有办法达到供电的要求,所以需要不同的直流电源来给电子设备供电。可编程直流电源就是这一种。在生产测试中&#xf…

Pandas的apply, map, transform介绍和性能测试

apply函数是我们经常用到的一个Pandas操作。虽然这在较小的数据集上不是问题,但在处理大量数据时,由此引起的性能问题会变得更加明显。虽然apply的灵活性使其成为一个简单的选择,但本文介绍了其他Pandas函数作为潜在的替代方案。 在这篇文章…

软测(基础)· 软件测试的生命周期 · 如何描述一个 Bug · Bug 的级别 · Bug 的生命周期 · 争执 · Bug 评审

一、软件测试的生命周期软件测试的生命周期 & 软件开发的生命周期二、如何描述一个 Bug三、如何定义 Bug 的级别四、Bug 的生命周期五、发生争执了怎么办?Bug 评审一、软件测试的生命周期 软件测试的生命周期:需求分析 → 测试计划 → 测试设计、测…

《巫师3:狂猎》4.01版更新 PC端已上线

去年12月,《巫师3》免费升级次世代版,加入DLSS 3支持,RTX 40系显卡的用户能直接提升体验感,RTX 30系用户能通过DLSS 2获得更稳定的帧数。 目前。《巫师3:狂猎》4.01版已更新上线,在PC、PlayStation 和 Xbo…

【配电网规划】配电网N-1扩展规划研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

OJ万题详解––[NOIP2010 提高组] 机器翻译(C++详解)

题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词…

openstack cinder对接两个ceph后端配置

需求 需要做卷迁移的工作,从一个ceph集群迁移到另一个集群,因此需要配置两个ceph后端。由此开展后续工作,将配置过程及出现的问题做一记录。 另外两套ceph后端的访问用户都是cinder用户,网上找的资料均为两个用户,当为…

电子技术——BJT的物理结构

电子技术——BJT的物理结构 本节我们介绍另一种基本三端元件,BJT。 物理结构 下图展示了NPN型和PNP型BJT的物理结构简图。 从图中看出,BJT主要由三个区域组成,发射极(n类型),基极(p类型&#…

如何跑起一个Python Flask 项目

最近做项目迁移,从Google cloud 迁移到 AWS项目:Python Flask ORM是Alembic(我不是搞python的 这边看到这个了)python 是docker 跑起来的,一个docker-compose up就完事但我要进行数据库迁移测试,所以本地要跑起来我是mac先安装pyt…

财报解读:大裁员后Meta的元宇宙还有新故事吗?

美股科技巨头Facebook自更名为Meta Platforms后全面发力元宇宙,作为美国第一大社交平台以及全球流量池,转型后的Meta一度被市场寄予厚望,但同样受累于其元宇宙策略,年初至今,Meta的股价累计一度下跌近65%,也…

【超详细】一文看懂如何在PyCharm中集成Git

PyCharm环境集成Git 当我们在官网下载好Git后,按照要求进行安装,就可以通过快捷方式对本地仓库进行版本控制啦。但是这种方式处理整个工作环境还是比较麻烦的,接下来,我们将在PyCharm环境中配置Git。 基础配置 在设置中&#xf…

IPV6基本了解

参考:https://support.huawei.com/enterprise/zh/doc/EDOC1100116138#ZH-CN_TOPIC_0204809629, https://www.w3cschool.cn/ipv6/ipv6_address_types.html IPv6地址结构 和IPv4的10进制的表示方式不同,IPv6使用的是16进制的表示方式。 首先基…

FreeRTOS内存管理

内存管理是一个系统基本组成部分,FreeRTOS 中大量使用到了内存管理,比 如创建任务、信号量、队列等会自动从堆中申请内存。用户应用层代码也可以使 用 FreeRTOS 提供的内存管理函数来申请和释放内存。本章要实现的功能是:使 用 heap_4.c 方案…

剑指Offer 第21天 不用加减乘除做加法 二进制中1的个数

剑指 Offer 65. 不用加减乘除做加法 写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内不得使用 “”、“-”、“*”、“/” 四则运算符号。 int add(int a, int b) {while(b ! 0){unsigned int c (unsigned)(a & b)<<1;a a ^ b;b c;}return a;} 剑…

Linux安装Mysql5.5

链接&#xff1a;https://pan.baidu.com/s/146KA6VfB4NW6mWSRRwXsMg 提取码&#xff1a;ib17 rpm安装Mysql5.5 检测Mysql是否安装 强制卸载原来的Mysql 安装Mysql服务端 安装Mysql客户端 启动Mysql------> service mysql start 连接Mysql------->mysql -u ro…

时序数据库

时序数据库(TSDB) 接下来就到了&#xff0c;自己所适应行业的数据库了&#xff0c;时许数据库&#xff0c;这类对物联网传感器数据有着很好的支持。 https://blog.csdn.net/firewater23/article/details/125697248 时序数据是随时间不断产生的一系列数据&#xff0c;简单来说…