RISC-V U-Boot 启动 Linux 内核的参数

news2024/11/15 11:20:20

RISC-V U-Boot 启动 Linux 内核的参数

U-Boot (the Universal Boot Loader简写U-Boot)

flyfish

U-Boot 启动Linux内核的参数举例说明

  • RISC-V U-Boot 启动 Linux 内核的参数
  • 方式一 文本操作
    • earlyprintk=sunxi-uart,0x02500000
    • clk_ignore_unused
    • console=ttyS0,115200
    • init=/sbin/init
    • partitions=ext4
    • cma=8M
    • gpt=1
  • 方式二 使用界面的方式进行配置

方式一 文本操作

内核命令参数
可以在 buildroot /board/型号/env.cfg 这里进行添加
举例

#kernel command arguments
console=ttyS0,115200
root_partition=rootfs
boot_partition=boot
keybox_list=widevine,ec_key,ec_cert1,ec_cert2,ec_cert3,rsa_key,rsa_cert1,rsa_cert2,rsa_cert3
#set kernel cmdline if boot.img or recovery.img has no cmdline we will use this
bootargs=earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 loglevel=8 root=/dev/mmcblk0p4  init=/sbin/init partitions=ext4 cma=8M  gpt=1
#uboot system env config
bootdelay=1
kernel=boot.img
mmc_boot_part=3
mmc_dev=0
boot_check=sunxi_card0_probe;mmcinfo;mmc part
boot_mmc=fatload mmc ${mmc_dev}:${mmc_boot_part} 45000000 ${kernel}; bootm 45000000
bootcmd=run boot_check boot_mmc

uboot传递给内核的启动参数

bootargs=earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 loglevel=8 root=/dev/mmcblk0p4  rw init=/sbin/init partitions=ext4 cma=8M  gpt=1

解释

earlyprintk=sunxi-uart,0x02500000

early_printk在内核串口设备初始化之前,打印输出日志,用于调试内核的启动问题
Sunxi:指 Allwinner 的一系列 SoC 硬件平台
UART:Universal Asynchronous Receiver/Transmitter,通用异步收发传输器
Console:控制台,Linux 内核中用于输出调试信息的 TTY 设备
0x02500000:可以根据具体厂商的设备树填写 例如
文件路径buildroot/output/build/linux-origin_master/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi

uart0: uart@2500000 {
	compatible = "allwinner,sun20i-uart";
	device_type = "uart0";
	reg = <0x0 0x02500000 0x0 0x400>;
	interrupts-extended = <&plic0 18 IRQ_TYPE_LEVEL_HIGH>;
	clocks = <&ccu CLK_BUS_UART0>;
	clock-names = "uart0";
	resets = <&ccu RST_BUS_UART0>;
	sunxi,uart-fifosize = <64>;
	uart0_port = <0>;
	uart0_type = <2>;
	status = "okay";
};

uart1: uart@2500400 {
	compatible = "allwinner,sun20i-uart";
	device_type = "uart1";
	reg = <0x0 0x02500400 0x0 0x400>;
	interrupts-extended = <&plic0 19 IRQ_TYPE_LEVEL_HIGH>;
	sunxi,uart-fifosize = <256>;
	clocks = <&ccu CLK_BUS_UART1>;
	clock-names = "uart1";
	resets = <&ccu RST_BUS_UART1>;
	uart1_port = <1>;
	uart1_type = <4>;
	status = "disabled";
};

uart2: uart@2500800 {
	compatible = "allwinner,sun20i-uart";
	device_type = "uart2";
	reg = <0x0 0x02500800 0x0 0x400>;
	interrupts-extended = <&plic0 20 IRQ_TYPE_LEVEL_HIGH>;
	sunxi,uart-fifosize = <256>;
	clocks = <&ccu CLK_BUS_UART2>;
	clock-names = "uart2";
	resets = <&ccu RST_BUS_UART2>;
	uart2_port = <2>;
	uart2_type = <4>;
	status = "disabled";
};

。。。。。。

想要改uart2后面就要跟着 2500800
对应的源码结构

|-- drivers
| |-- tty
| | |-- serial
| | |-- serial_core.c
| | |-- sunxi-uart.c
| | |-- sunxi-uart.h

看其他厂商

/buildroot/output/build/linux-origin_master/arch/riscv/boot/dts/sifive/fu540-c000.dtsi

clk_ignore_unused

是忽略掉没有使用的时钟

console=ttyS0,115200

tty 是 Teletype 或 Teletypewriter 的缩写,是指电传打字机,硬件虽然现在不用流行了,现在做为传统名字保留到现在,现在tty设备还包括虚拟控制台,串口以及伪终端设备。
这里的意思是串口名从ttyS0开始依次是ttyS1、ttyS2等,这里使用ttyS0作为通信串口。

波特率115200
root=/dev/mmcblk0p4 rw
根文件系统在SD卡端口0设备第4分区,rw是根文件系统可读写

mmcblk0p4的含义
MMC全称MultiMedia Card,是1997年的多媒体记忆卡标准
SD卡全称Secure DigitalMemory Card,是1999年的新一代记忆卡标准,已完全兼容MMC标准。
MMC 是 SD 的前身,SD兼容MMC,Linux 的设备节点延用了 MMC 的这个名字
blk (block)是块设备,后面的数字是设备的顺序编号
p(partition)表示分区,p4就是第一个分区

init=/sbin/init

/sbin/init linux的进程1的路径,也可以是/linuxrc

partitions=ext4

根文件系统的类型是ext4

cma=8M

CMA: 连续内存分配器 (Contiguous Memory Allocator)
内存初始化时预留一块连续内存

gpt=1

GUID分区表 GUID Partition Table

方式二 使用界面的方式进行配置

在Buildroot配置内核
在Buildroot根目录运行命令

make linux-menuconfig

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
填写例如

earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 loglevel=8 root=/dev/mmcblk0p4 rw init=/sbin/init partitions=ext4 cma=8M  gpt=1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改完配置之后,需要重新编译linux内核,然后重新烧写sdcard.img
dmesg(display message)查看启动信息
Kernel command line 之后更改之后的信息

[    0.000000] Kernel command line: earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 loglevel=8 root=/dev/mmcblk0p4 rw  init=/sbin/init partitions=ext4 cma=8M  gpt=1
[    0.000000] Dentry cache hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    0.000000] Inode-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.000000] Sorting __ex_table...
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 490532K/522240K available (6716K kernel code, 704K rwdata, 2226K rodata, 196K init, 411K bss, 23516K reserved, 8192K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

参考
https://itsfoss.com/what-is-tty-in-linux/
https://www.kernel.org/doc/html/latest/driver-api/clk.html

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

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

相关文章

go-resiliency源码解析之-batcher

go-resiliency源码解析之-batcher 源代码地址 &#xff1a; https://github.com/eapache/go-resiliency/blob/master/batcher/batcher.go 1.batcher定义 创建一个batch对象需要2个参数: Timeout:超时,这是一个batch对象收集输入参数的时间。 work函数变量&#xff1a;在ti…

使用Jumpserver+Frp集中管理远程内网服务器

我们设想这样一种情况&#xff0c;我们是一家小公司&#xff0c;在全国有几个小分支办公机构&#xff0c;每个机构有一台服务器&#xff0c;由于公司财务紧张&#xff0c;买不起专线&#xff0c;用的也是普通家用宽带&#xff0c;SD-WAN设备说实话也挺贵的&#xff0c;那么我们…

Docker部署MySQL主从复制架构

文章目录 1、准备工作2、下拉镜像&#xff0c;启动容器3、编辑 MySQL 主节点配置4、编辑 MySQL 从节点配置5、通过 Navicat 配置主节点6、通过 Navicat 配置从节点7、最终测试 1、准备工作 云服务器&#xff08;虚拟机也可以&#xff09;安装Docker&#xff0c;参考该文章第1小…

Telnet 【实验】

1 什么是Telnet&#xff1f; Telnet是进行远程登录的标准协议&#xff0c;它是当今Internet上应用最广泛的协议之一。它把用户正在使用的终端或计算机变成网络某一远程主机的仿真终端&#xff0c;使得用户可以方便地使用远程主机上的软、硬件资源。 为什么需要telnet&#xf…

python自动化程序操作浏览器在后台访问网站

目录 1、简介2、详细步骤3、驱动3.1、ChromeDriver3.2、GeckoDriver3.3、Microsoft WebDriver3.4、下载链接 4、完整代码 ⭐在当今信息化的时代&#xff0c;访问网站已经成为人们生活中必不可少的一部分。 1、简介 对于某些需要批量访问网站的任务&#xff0c;手动访问既费时又…

Java - Thread、ThreadLocal、ThreadLocalMap

一、概念 用处每个线程需要持有自己单独的数据&#xff0c;数据在同线程中被多个地方共享&#xff0c;但多线程中不共享。原理创建 ThreadLocal 对象用来存取值&#xff0c;操作的是 CurrentThread 里的 ThreadLocalMap&#xff0c;由于每个 Thread 中都有自己的 ThreadLocalM…

Codeforces Round 870 (Div. 2)

Codeforces Round 870 (Div. 2) A. Trust Nobody 题意&#xff1a; 给你一个数组a&#xff0c;a[i]表示第i个人认为至少有a[i]个人说谎&#xff0c;请你找到正确的说谎人数 思路&#xff1a; 我们认为说谎人数有x人&#xff0c;那么数组a中大于x的元素都是说谎&#xff0c;…

rosbag相关操作

一些很好用的网站 时间戳在线转换网页 旋转矩阵、四元数、绕轴旋转、欧拉角在线转换网页 四元数、欧拉角可视化在线转换网页 一、按时间截取bag 使用如下代码&#xff1a; rosbag filter 原始包名.bag 截取后的包名.bag "t.to_sec() > 开始时间 and t.to_sec() <…

机器学习随记(3)— Softmax

Softmax 与sigmoid不同&#xff0c;softmax可以多个输出&#xff0c;每个输出以概率的形式表示。 或者 def my_softmax(z):ez np.exp(z) sm ez/np.sum(ez)return(sm) 1 损失函数Loss Softmax 相关的损失函数&#xff0c;即交叉熵损失&#xff1a; 2 成本函数Cos…

Vben Admin 自学记录 —— 路由跳转的基本使用及练习(持续更新中...)

路由 项目路由配置存放于 src/router/routes 下面。 src/router/routes/modules用于存放路由模块&#xff0c;在该目录下的文件会自动注册。 路由相关使用及概念 练习 —— 在之前table基础上&#xff0c;添加新增功能&#xff0c;点击新增按钮&#xff0c;跳转页面&#xf…

电脑中病毒了怎么修复、怎么办,计算机windows系统如何预防faust勒索病毒

随着科技技术的不断发展&#xff0c;计算机已经成为现代人工作和生活中的必备工具之一&#xff0c;同时衍生出的各种计算机病毒也越来越多。各种勒索家族的加密病毒程序不断升级&#xff0c;给我们的工作和生活带来了极大困扰&#xff0c;特别是最近爆发的一种新型计算机病毒—…

如何优化 yolov8 模型,压缩模型大小,部署到边缘设备上

在CV领域&#xff0c;YOLO系列目标检测模型是一种非常流行的深度学习网络模型。yolov8是23年1月10号开源的最新版本。虽然YOLOv8已经在精度和速度方面取得了显著的改进&#xff0c;但我们仍然可以从轻量化角度等很多方面来进一步优化该模型。 模型压缩&#xff1a;使用轻量化的…

华为EC6108V9A_RK3128_安卓4.4.4_卡刷固件包-内有教程-当贝纯净桌面

华为EC6108V9A_RK3128_安卓4.4.4_卡刷固件包-内有教程-当贝纯净桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&a…

不用花一分钱!!!获得一个自己的网页版chatGPT

不用花一分钱&#xff01;&#xff01;&#xff01;获得一个自己的网页版chatGPT 当然还是需要一个chatGPT账号的&#xff0c;不会注册的同学可以看一下这篇文章 chatGPT到底要怎么注册 那就先让我们看一下效果吧 chatgpt-web介绍 github项目地址 https://github.com/Chanzha…

【源码解析】实现异步功能的注解 @Async 的源码解析

使用方式 启动类上添加注解EnableAsync()在方法或者类上添加Async 源码解析 初始化配置 EnableAsync注入了AsyncConfigurationSelector Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Import(AsyncConfigurationSelector.class) public interf…

【郭东白架构课 模块二:创造价值】23|节点四:架构规划之统一语义

你好&#xff0c;我是郭东白。从这节课开始&#xff0c;我们就进入到架构活动的第四个环节——架构规划。这个环节比较复杂&#xff0c;可以分为四个部分&#xff1a;统一语义、需求确认、边界划分和规划确认。这节课我们先来讲统一语义。 架构师的工作日常就是跟不同的角色沟…

Mysql索引(4):索引语法

1 创建索引 CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... ) ; 2 查看索引 SHOW INDEX FROM table_name; 3 删除索引 DROP INDEX index_name ON table_name; 4 案例演示 先来创建一张表 tb_user&#xff0c;并且查询测试数据。 creat…

从零开始学习Linux运维,成为IT领域翘楚(九)

文章目录 &#x1f525;Linux系统服务&#x1f525;Linux系统定时任务 &#x1f525;Linux系统服务 Service命令 服务(service) 本质就是进程&#xff0c;但是是运行在后台的&#xff0c;通常都会监听某个端口&#xff0c;等待其它程序的请求&#xff0c;比如(mysql , sshd 防…

Vue加SpringBoot实现项目前后端分离

首先需要搭建一个Vue的脚手架项目&#xff08;已经放在gitee里面了&#xff0c;下面是gitee网址&#xff0c;可以直接拉&#xff09; 那么接下来就是实现前后端分离的步骤 首先我们需要有一个登录页面 登录的点击事件利用axios提交到后台去&#xff0c;代码放在后面&#xff08…

【C++修炼之路:二叉搜索树】

目录&#xff1a; 二叉搜索树的概念构建一颗二叉树二叉树的查找二插树的插入 二叉树的删除删除右子树的最小节点 写一个中序来走这个二叉搜索树递归版删除&#xff08;recursion&#xff09;递归版插入&#xff08;recursion&#xff09;递归版查找&#xff08;recursion&#…