Linux学习笔记4

书接上文,我们上两篇在讲建立最小Linux系统时要创建的几个脚本,接下来我们继续说一下

建立最小系统之创建文件系统所需文件(续)

之后我们返回etc目录,再返回system目录,接着使用“cd lib”命令进入到lib 目录

因为使用的交叉编译环境和编译内核的相同,所以编译器是/usr/local/arm/arm-2009q3,
Busybox 编译生成的二进制文件以动态链接库的形式运行,所以需要拷贝编译器里面的库文
件到lib 目录,使用下面的命令:
“cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* ./”

注释:

关于交叉编译

交叉编译器就是一个压缩包,它里面有个bin文件夹,这个文件夹有一个arm-xxx-gcc,

是个可执行程序,一般编译程序我们就是用这个,然后在这个文件夹里arm-xxx-gcc -v可以查看这个编译器的版本,其实交叉编译器就和ubuntu里的gcc用法一样,只不过它编译出来的程序是跑在开发板上的而已。

一般我们对这个交叉编译器就是,找个目录放压缩包,解压,然后找到压缩包里的bin目录,复制这个路径,将这个路径添加到环境变量

然后以后我们编译要运行在开发板上的程序的时候,就用arm-xxx-gcc来编译~

编译内核源码也是类似的,就是修改makefile里的编译器路径,将交叉编译的路径复制到makefile里,再编译~ 这样就是所谓的编译程序和编译内核的交叉编译器一致了(在内核源码的根目录下,有一个名为 Makefile(或者 Makefile 系列文件)的文件,它包含了编译内核的规则和指令。你可以在这个文件中找到编译器的路径、编译选项等设置。)

动态链接库

在程序执行时,如果它需要调用动态链接库中的函数或使用其中的数据,操作系统会动态地将该库加载到内存中,并且将程序中对库函数的调用映射到实际的库代码。这样,多个程序可以共享同一个动态链接库的实例,从而减少了内存的占用。

和静态链接库对比:

动态链接库:在程序执行时,动态链接库被加载到内存中,并在需要时动态链接到程序中。这意味着动态链接库在运行时被加载,可以与多个程序共享,并且可以通过更新单个库文件来更新所有依赖它的程序。

静态链接库:在程序编译时,静态链接库的代码和数据被静态地嵌入到可执行文件中。这意味着程序在运行之前就已经包含了所有依赖的库函数,因此它们独立于外部的库文件。

通常情况下,动态链接库存放在系统指定的目录中,例如 /lib/usr/lib

之后返回到system 目录,使用“cd var”命令进入到var 目录,使用“mkdir lib lock log run tmp”命令在var 目录下建立lib,lock,log,run,tmp 五个目录,至此,文件系统所需要的文件都已经创建好了

建立最小系统之安装打包软件make_ext4fs

为了方便开发板能读懂,make_ext4fs可以将我们建立好的文件系统制作成二进制文件(即一个ext4文件系统镜像文件),我们将对应的压缩包拷贝到根目录下,之后解压,安装好make_ext4fs后,进入目录“/home/minilinux/”,使用命令
“make_ext4fs -s -l 314572800 -a root -L linux system.img system”生成system.img

文件系统镜像(文件系统镜像文件就是一个“大包裹”,把整个文件系统都打包起来,方便存储、备份、部署和使用)

现在已经完成了linux 文件系统的制作,可以烧写到开发板上了(作者本人用的是iTOP-4412),完结撒花!

helloworld程序

学习目的:学习一下应用程序如何编译、如何运行、如何修改权限等等实际操作

首先我们要在windows用Notepad++编辑一个helloworld的c文件(如果可以的话,可以自行在ubuntu下载一个vs),之后将这个c文件通过共享文件夹或者其他方式拖进ubuntu里

我们需要一个文件夹来存放一些源码和程序,所以要新建linuxsystemcode目录,之后去建立目录“helloworld”,进入到目录“helloworld”,将刚刚写的c文件拷贝在这里,之后使用命令“vi helloworld.c”或者“vim helloworld.c”命令

helloworld程序之编译方法

使用“cd”命令回到根目录,然后使用命令“vim .bashrc”打开环境变量文件,查看最低行是不是和编译内核用的编译器一样

之后回到helloword目录里,使用命令
“arm-none-linux-gnueabi-gcc -o helloworld helloworld.c -static”

注释:arm-none-linux-gnueabi-gcc是编译器的名称

"-o" 选项后面跟着要生成的可执行文件的名称,这个选项指定生成的可执行文件的名称为 "helloworld"

helloworld.c是要编译的 C 语言源文件的名称

-static这个选项指示编译器生成的可执行文件应该是静态链接的,即将所有依赖的库文件都嵌入到可执行文件中,而不是在运行时动态加载,这意味着生成的可执行文件不依赖于目标系统上的动态链接库,可以在没有这些库的系统上运行

之后编译成功,生成“helloworld”文件。

helloworld程序之修改权限和运行-U 盘

先将可执行文件helloworld 拷贝到U 盘,根据经验可以知道,用于挂载外部设备如U盘等的目录是"/mnt/udisk"目录,我们启动开发板后,如果文件系统第一次启动的时候没有/mnt/udisk 目录,使用命令“mkdir /mnt/udisk”新建。

插入u 盘的时候,被识别为sda1,使用命令“mount /dev/sda1 /mnt/udisk”加载u 盘,这个时候可以直接对U盘进行操作,我们使用命令“chmod 777 /mnt/udisk/helloworld”修改c文件的权限

然后使用命令“./mnt/udisk/helloworld”运行helloworld 程序,会出现打印信息

helloworld程序之修改权限和运行-TF 卡

启动开发板,插入TF卡之后可以看见TF卡的设备节点“mmcblk1:p1”,之后使用命令“mkdir /mnt/udisk1”新建/mnt/udisk1 目录,使用命令“mount /dev/mmcblk1p1 /mnt/udisk1”加载tf 卡,之后使用命令“ls /mnt/udisk1/”可以查看到helloworld 可执行程序。

使用命令“./mnt/udisk1/helloworld”运行helloworld,打印出了HelloWorld!。

将helloworld 编译进文件系统

使用这种方式就可以不用U 盘或者TF 卡来拷贝程序了。

用cp 命令将编译好的helloworld 程序移动到system 下的bin 目录,然后编译system,然后将重新烧写一下“system.img”文件系统,之后修改权限,运行/bin目录下的helloworld可执行文件

linux 用户、用户组、权限

在Linux 中,超级用户称为root。root 用户可以控制所有的程序,访问所有文件,使用系
统上的所有功能。对root 用户来说没有不可以做的事情。就管理的角度而言,root 的权限是
至高无上的。

在虚拟机的Ubuntu 系统下,使用命令“su root”,然后输入密码即可登录“root”用户

创建/删除用户

可以通过useradd 命令来创建新用户,使用命令“ useradd xunwei”添加用户xunwei,然后使用命令“cat/etc/passwd”,将 "/etc/passwd" 文件的内容打印到终端上后,在/etc/passwd 下可以看到/home/xunwei 用户

使用“userdel xunwei”命令可以删除用户xunwei

注释:"/etc/passwd" 是一个文本文件,用于存储系统用户的基本信息。这个文件的格式是以冒号 ":" 分隔字段的文本文件,每行对应一个用户的信息

Linux 用户的组织

在linux 中,所有的用户都存在于“/etc/passwd”中,可以使用命令“more/etc/passwd”去查看

第一列是用户名;第二列是用户的密码;第三列是用户的数字ID;第四列是用户的主组的
ID;第五列是用户的全名或者是注释;第六列是用户主目录的位置,这个目录通常位于/home
目录下,目录名与用户ID 相同;第七列是用户的默认控制台shell。

上面第二列的x,并不代表密码就是x,这里只是隐藏了,另外只有超级用户可以修改其它
用户的密码。

Linux 组

Linux中可以创建一个组,然后将成员添加到这个组的列表中,可以以组为单位来分配资源。隶属于同一个组的成员可以访问同一资源。

可以使用控制台命令groupadd 创建组,之后用命令“cat /etc/group”查看,可以看见新建的组

第一列是组的名字,第二列是一个密码(这里的x不是真正的密码),第三列是组的一个数字索引,在第三列之后将是以逗号隔开的组的成员的用户ID

【未完待续】

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

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

相关文章

现在做电商迟吗?那是你不知道今年黑马,视频号小店重磅来袭

大家好,我是电商笨笨熊 24年想做电商,还能不能做? 当然可以。 电商是一个长期的市场,只要用户有需求,那么电商就会一直存在; 尤其是近几年来无货源模式爆火,对于我们商家来说这种无需自备货…

flutter 使用Scrollbar 时出现 滚动条不置顶问题

Flutter 使用 CupertinoScrollbar 、Scrollbar 与 ListView.builder 结合使用时, 当把 ListView.builder 边距设置为 padding: const EdgeInsets.all(0) 的时候, Scrollbar 的滚动条不置顶。 如图:右侧边上的滚动条 解决方法: …

抖店的爆品,到底是选出来的还是推出来的?我的看法是......

我是王路飞。 做电商的,你要说你对爆品没有想法,那劝你不要做了。 有人认为做抖店,爆品都是选出来的,毕竟方向不对,努力白费。 也有人认为做抖店,爆品都是推出来的,再好的产品,达…

KNIME 报告扩展

文档对应的 KNIME AP 版本为 5.2 介绍 本指南介绍了 KNIME 报告扩展,并展示了如何创建简单和高级报告。 本指南更新于 2024/05/13,最新版请访问指北君网站 https://havef.fun/knime-cn/knime-doc/ KNIME 报告扩展允许您根据工作流程的结果创建静态报告。…

租赁小程序开发搭建支持时租日租月租

租赁小程序开发搭建支持时租日租月租 一款开源版的小程序,专为物品租赁服务设计,能满足客户在各种租赁场景中的需求。 该程序支持时租、日租、夜租等多种租赁方式,并配备了DIY页面和分销系统。用户可以通过平台轻松租赁商品,支付…

HTML与cgi程序的数据交互

1. Html通过ajax获取cgi返回的数据 function HtmlGetCgiData() {$.ajax({type: POST, //提交方法url: cgi-bin/wg67_key_in/wg67_key_in_reflush.cgi, //调用到的cgi程序data: "ajax", //发送的数据,不可缺失该项,不能为空(空&…

[Linux][网络][协议技术][DNS][ICMP][ping][traceroute][NAT]详细讲解

目录 1.DNS1.DNS背景2.域名简介 2.ICMP协议1.ICMP功能2.ICMP两类报文 3.ping命令4.traceroute5.NAT技术1.NAT技术背景2.NAT IP转换过程3.静态地址NAT && 动态地址NAT4.网络地址端口转换NAPT5.NAT技术的缺陷6.NAT和代理服务器 6.总结1.数据链路层2.网络层3.传输层4.应用…

难以重现的 Bug如何处理

对很多测试人员(尤其是对新手来说)在工作过程中最不愿遇到的一件事情就是:在测试过 程中发现了一个问题,觉得是 bug,再试的时候又正常了。 碰到这样的事情,职业素养和测试人员长期养成的死磕的习性会让她…

SpringBoot工程引用其他工程构建的jar包

1、问题 存在A、B两个工程,其中B工程需要引用A工程的jar包。 2、解决办法 A工程 (1)自动配置bean。 Configuration ComponentScan("cn.ac.trimps.auth.**") public class AuthClientConfig {} Retention(RetentionPolicy.RUNTIME…

Android Studio开发之路(十)app中使用aar以及报错记录

书接上文:Android Studio开发之路(九)创建android library以及生成aar文件 五、app中使用aar文件的方法 先复制一下上面生成的aar文件。然后在你要添加到的app左上角选择“project”模式,然后找到libs文件夹,点击右键…

全自动封箱机:智能包装与物流领域的新引擎,助力产业升级

在智能化、自动化的浪潮下,全自动封箱机以其高效、精准的特点,正逐渐成为智能包装和物流领域的新宠。这种先进的机械设备不仅提升了包装效率,还大大地推动了物流行业的现代化进程,为产业升级注入了新动力。 全自动封箱机的重要性不…

Centos中将UTC的时区改为CTS时区

date命令可以看到现在的时间以及时区,可以看到现在是UTC时区 而想要更改时区那么就要了解tzselect命令 tzselect 是一个 Linux 命令行工具,用于交互式地帮助用户选择并设置系统的时区。这个程序会通过一系列的问题引导用户,从而确定用户所在的…

【Linux网络】HTTPS【上】{运营商劫持/加密方式/数据摘要/https的诞生}

文章目录 1.引入1.1http与https1.2SSL/TLS1.3VPN1.4认识1.5密码学1.6为什么要加密?运营商 1.7常见的加密方式对称加密非对称加密 2.加密与解密3.数据摘要 && 数据指纹MD5 数字 签名理解三者数据摘要(Digital Digest):数字…

实现echarts地图

效果图: 2.echarts.registerMap("xizang", XZ) 注册了一个名为 "xizang" 的地图,其中 XZ 是地图数据。 接下来是 option 对象,包含了图表的配置信息,比如图表的布局、提示框样式、地理组件配置和系列数据配置等。 在 t…

Linux 第二十九章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

分布式光伏管理系统的意义与核心技术

分布式光伏管理系统遵循安全可靠、经济合理原则,满足电力系统自动化总体规划要求,且充分考虑光伏发电的因素,对分布式光伏发电、用电进行集中监控、统一调度、统一运维。为用户提供运维服务,实现能源互联,信息互通&…

软件安全测试可以检测软件哪些安全问题?

软件安全测试是一种旨在发现和评估软件应用程序中的安全漏洞和隐患的测试方法。通过安全测试,可以发现并修复潜在的安全问题,从而提高软件应用程序的可靠性和安全性。下面将介绍软件安全测试可以检测到的几种主要安全问题。 身份验证漏洞:身份…

如何将 DFMini player MP3 模块与 Arduino 结合使用

要创建此项目,您将使用: DFPlayer迷你MP3模块 10kΩ电阻 开关按钮 面包板 Arduino UNO 杜邦线 现在,我们将学习如何构建该项目。 什么是DF Mini Player MP3模块 DFMini Player 模块是一个小型音乐播放器。它成本低、功耗低,可…

五月采购节 | 全场板卡八七折起

淘宝搜索【北京迅为电子官方企业】 5月13日~5月15日 海量优惠券等你拿! 复制下方链接到淘宝 直接进入店铺! https://shop459378556.taobao.com

空号检测-号码批量检测API接口-关机停机风险号检测

手机空号检测分为普通空号检测和实时检测两种类型: 普通空号检测返回结果:实号、风险号、空号、沉默号 。 1.普通版的检测不会实时更新数据,因此其数据库中的信息可能不是最新的。 2.覆盖基础运营商的数据库,检测范围相对有限&…