ARM Linux DIY(十一)板子名称、开机 logo、LCD 控制台、console 免登录、命令提示符、文件系统大小

文章目录

    • 前言
    • 板子名称
      • uboot Model
      • kernel 欢迎词、主机名
    • 开机 logo
    • LCD 控制台
    • console 免登录
    • 命令提示符
    • 文件系统大小

前言

经过前面十篇文章的介绍,硬件部分调试基本完毕,接下来的文章开始介绍软件的个性化开发。

板子名称

uboot Model

既然是自己的板子,那开机信息当然也要显示自己的。在 uboot 的 dts 文件中,将 model 改为 “V3s DIY”
arch/arm/dts/sun8i-v3s-licheepi-zero.dts

/ {model = "V3s DIY";compatible = "licheepi,licheepi-zero", "allwinner,sun8i-v3s";
};

开机

U-Boot 2022.01 (Sep 07 2023 - 22:58:03 +0800) Allwinner TechnologyCPU:   Allwinner V3s (SUN8I 1681)
Model: V3s DIY // 这里已更改
DRAM:  64 MiB
WDT:   Not starting watchdog@1c20ca0
MMC:   mmc@1c0f000: 0
Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1... In:    serial@1c28000
Out:   serial@1c28000
Err:   serial@1c28000
Net:   No ethernet found.
Hit any key to stop autoboot:  0 

kernel 欢迎词、主机名

在这里插入图片描述
开机

[    2.006117] Run /sbin/init as init process
[    2.148117] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)Welcome to V3s LYJ
v3s-diy login: root
#

开机 logo

在这里插入图片描述
运行
在这里插入图片描述
Linux 吉祥物小企鹅已跃然屏上

LCD 控制台

使用 LCD 作为控制台,键盘作为输入,一台卡片电脑就成型了
在 /etc/inittab 中添加下面这行

tty0::respawn:/bin/sh

tty0 对应 /dev/fb0,也就是 LCD 屏幕的帧缓冲区,原理参考《lcd如何与tty1相对应?》
这样,LCD 就显示 /bin/sh 作为控制台了。
在这里插入图片描述

console 免登录

console 需要输入 root 才能进入系统,简直浪费生命,我需要上电后直接可以输入命令操作
step1: 关闭 getty (登录)进程
在这里插入图片描述
step2: /etc/inittab 中添加

ttyS0::respawn:/bin/sh

开机

[    1.843403] Run /sbin/init as init process
[    1.986286] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
# 
# ls
bin         lib         lost+found  opt         run         tmp
dev         lib32       media       proc        sbin        usr
etc         linuxrc     mnt         root        sys         var
#

这多爽啊,不用在一遍一遍地输入 root 甚至 password 了。

不过,我还想开机后就在 /root 目录,这样更方便些,改成如下

ttyS0::respawn:/bin/sh -c "cd /root; exec /bin/sh"
tty0::respawn:/bin/sh -c "cd /root; exec /bin/sh"

开机

[    1.862823] Run /sbin/init as init process
[    2.005049] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
# pwd
/root

已经基本实现了要求。
不过还是有点瑕疵,就是直接运行 /bin/sh 作为 shell,相当于没有用户的概念,这样执行 cd ~ 就会进入根目录而不是 /root

# cd ~
# pwd
/

后来又找到了一个方案

ttyS0::respawn:/bin/sh -c "exec /bin/login -f root"

这样才是正规的使用 root 用户

[    1.840405] Run /sbin/init as init process
[    1.987648] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
# pwd
/root

命令提示符

像 Ubuntu 等系统,命令行提示符显示用户名、主机名、当前路径,有很好的提示作用
在这里插入图片描述
而我们的系统,一直就只显示一个 #,好不枯燥
在这里插入图片描述
所以这里也要改造一下,
我们知道,命令提示符显示的是 PS1 这个环境变量,我们看下它的值,就是一个 # 号,

# echo $PS1
#

我们在 /etc/profile 文件中修改一下该环境变量
原始

if [ "$PS1" ]; thenif [ "`id -u`" -eq 0 ]; thenexport PS1='# 'elseexport PS1='$ 'fi
fi

修改后

if [ "$PS1" ]; thenif [ "`id -u`" -eq 0 ]; thenexport PS1='\u@\h:\w\# 'elseexport PS1='\u@\h:\w\$ 'fi
fi

运行,用户、主机名、当前路径都显示出来了
在这里插入图片描述
如果能像 Ubuntu 那样显示颜色就更好了,那就给它点颜色瞧瞧

if [ "$PS1" ]; thenif [ "`id -u`" -eq 0 ]; thenexport PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# 'elseexport PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$ 'fi                                                                                    
fi

运行
在这里插入图片描述
越来越漂亮了

文件系统大小

使用 buildroot 默认编译出来的文件系统大小只有几十兆,这样卡片电脑能够使用的 flash 空间就有限,现将其扩大为 512M
在这里插入图片描述
开机

root@v3s-diy:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root               487.6M    210.8M    240.9M  47% /
devtmpfs                 18.3M         0     18.3M   0% /dev
tmpfs                    26.8M         0     26.8M   0% /dev/shm
tmpfs                    26.8M     28.0K     26.8M   0% /tmp
tmpfs                    26.8M     20.0K     26.8M   0% /run

总大小 487M,剩余 240M,够用了。

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

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

相关文章

ueditor百度富文本编辑器粘贴后html丢失class和style样式

问题 项目经理从123在线编辑上排版好的文章,粘贴到项目的编辑器上,样式完全乱了, 排版是这样的: 复制到ueditor后的格式: 这天差地别呀,于是打开代码模式,发现section的属性全没了 但是,sp…

macOS 12 Monterey:一次全新的跨设备协作体验

macOS 12 Monterey是苹果公司的一次重大突破,它打破了设备间的壁垒,将不同设备无缝地连接在一起,极大地提升了用户的工作效率和娱乐体验。Monterey带来了通用控制、AirPlay、捷径等新功能,以及一些实用的新小功能。 安装&#xf…

vue前后端分离单点登录,结合长token和短token进行登录

单点登录背景 在公司发展初期,公司拥有的系统不多,通常一个两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登陆,很方便,但是,随着企业的发展,用到的系统随之增加&#x…

如何对Map集合的key进行大小写转换?

工具类&#xff1a; ToUpperCaseKeyMapUtil.java public class ToUpperCaseKeyMapUtil {//对单一的mappublic static <T> Map<String, T> toUpperCaseKeyMap(Map<String, T> map) {if (map ! null) {List<String> mapKeyList new ArrayList<>…

软件设计模式系列之五——建造者模式

1 模式的定义 建造者模式是一种对象创建型设计模式&#xff0c;它将一个复杂对象的构建过程与其表示分离。这意味着你可以使用相同的构建过程来创建不同类型的对象&#xff0c;而不必关心每个对象的内部细节。这种模式适用于构建具有复杂配置的对象&#xff0c;例如具有多个可…

Linux:LVS (NAT群集搭建)

模拟环境 外网入口服务器 外网 192.168.8.88 内网ip 192.168.254.4 web1 服务器 ip 192.168.254.1 网关&#xff1a; 192.168.254.4 web2 服务器 ip 192.168.254.2 网关&#xff1a; 192.168.254.4 共享存储服务器 ip 192.168.254.3 介绍 访问 外网192.16…

Spring Boot + Vue + Element UI的网上商城后台管理之订单管理系统

Spring Boot Vue Element UI的网上商城后台管理之订单管理系统 思维导图 以下是订单管理系统的思维导图&#xff0c;展示了系统的主要功能和模块之间的关系。 根节点 订单列表 查看订单列表搜索订单排序订单导出订单列表 订单详情 查看订单详情修改订单信息 修改商品信息修…

Python编程指南:利用HTTP和HTTPS适配器实现智能路由

嗨&#xff0c;爬虫大佬们&#xff01;今天我要为大家分享一篇关于如何利用HTTP和HTTPS适配器来实现智能路由的Python编程指南。在现代互联网应用中&#xff0c;路由功能起着至关重要的作用&#xff0c;而利用Python编程语言实现智能路由则可以为我们的应用带来更高的灵活性和性…

Window 平台开发基础(一)SDK

基本概念 什么是 SDK SDK 是软件开发工具包&#xff08;Software Development Kit&#xff09;的缩写。它是一个集成了软件开发所需工具、库文件、示例代码和文档等资源的软件包。 SDK 通常由软件开发公司或平台提供&#xff0c;旨在帮助开发人员构建、测试和部署特定类型的…

IAM、EIAM、CIAM、RAM、IDaaS 都是什么?

后端程序员在做 ToB 产品或者后台系统时&#xff0c;都不可避免的会遇到账号系统、登录系统、权限系统、日志系统等这些核心功能。这些功能一般都是以 SSO 系统、RBAC 权限管理系统等方式命名&#xff0c;但这些系统合起来有一个专有名词&#xff1a;IAM。 IAM IAM 是 Identi…

一线大厂Redis高并发缓存架构实战与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失…

基于springboot 的 Ajax-fetchget post Axios-get post

Fetch Fetch API 提供了一个 JavaScript 接口&#xff0c;用于访问和操纵 HTTP 管道的一些具体部分&#xff0c;例如请求和响应。它还提供了一个全局 fetch() 方法&#xff0c;该方法提供了一种简单&#xff0c;合理的方式来跨网络异步获取资源。 这种功能以前是使用 XMLHttpRe…

9.14 C++作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std;template <typename T> class Myvector {T *data; //存储数据的数组int len; //当前数组的长度int mycapa; //容纳数据的总容量public://…

docker镜像管理-实操

一.docker镜像管理 1.拉取镜像 docker image pull <repository>:<tag> 镜像名称和标签使用 : 进行分隔&#xff0c;如果省略了标签&#xff0c;则默认为 latest docker image pull nginx:latest 或者docker pull nginx:latest 拉取下来的镜像默认保存在&#xff1…

Android kotlin系列讲解(进阶篇)解析XML格式数据

点击查看>返回总目录< | 上一篇:Android kotlin系列讲解(入门篇)使用HTTP访问网络 文章目录 1、Pull解析方式2、SAX解析方式 通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据。不过这个时…

GO语言篇之文件操作

GO语言篇之文件操作 文章目录 GO语言篇之文件操作前言使用总结 前言 Go语言提供了丰富的操作文件的函数&#xff0c;这为我们开发者减少了不少负担 使用 // 打开文件 file, err : os.Open("filepath") if err ! nil {panic(err) }// 关闭文件&#xff0c;每次该文…

Ubuntu下Nginx配置ModSecurity详细思路及过程

下面是一个简介&#xff1a; Ubuntu是一个linux操作系统&#xff0c;Nginx是一个web服务器软件&#xff0c;ModSecurity是一款开源的web应用防火墙&#xff08;江湖人称“WAF”&#xff09;。 如果上面的概念没有一定的了解&#xff0c;下面的内容其实也能看。就是不好操作。…

浅谈C++|模板篇

一.模板模板概念 模板就是建立通用的模具&#xff0c;大大提高复用性 模板的特点&#xff1a; 1.模板不可以直接使用&#xff0c;它只是一个框架 2.模板的通用并不是万能的 C另一种编程思想称为泛型编程&#xff0c;主要利用的技术就是模板。 C提供两种模板机制:函数模板和类模…

宋浩概率论笔记(八)假设检验

宋浩系列全系列的最后一更&#xff01; 本章考察频率很低&#xff0c;核心在于记忆检验不同参数时用到的分布~

【项目实战】【已开源】USB2.0 HUB 集线器的制作教程(详细步骤以及电路图解释)

写在前面 本文是一篇关于 USB2.0 HUB 集线器的制作教程&#xff0c;包括详细的步骤以及电路图解释。 本文记录了笔者制作 USB2.0 HUB 集线器的心路历程&#xff0c;希望对你有帮助。 本文以笔记形式呈现&#xff0c;通过搜集互联网多方资料写成&#xff0c;非盈利性质&#xf…