移植useradd到嵌入式Linux设备

2024-01-04

(友情提示:前面一大段描述的是在老版本Ubuntu14.4交叉编译新版本shadow,过程曲折,没有结果,分割线后面一段是重新换了一个较老版本shadow-4.4,过程丝滑,结果喜人。诸君如耐心有限可直接划拉至分割线后部分内容。对于其他程序的移植也是同理,合适的才是最好的)

一般嵌入式Linux设备上只有默认的一个root用户(其他的比如ftp什么的用户暂时不管)及其一个对应的密码(比如通过SSH或串口登录进去的时候会被要求输入用户名及密码),如果我们根据某种需求需要新增一个用户,可以通过useradd命令进行添加,桌面Linux系统一般自带,但嵌入式设备可能会被裁剪掉,此时就需要通过移植的方式添加这个命令。

GitHub - shadow-maint/shadow: Upstream shadow tree 下载shadow工程源码,将压缩包拷贝进Linux系统中(如果用的虚拟机, 千万不能放到与windows的共享路径下 ),解压后如下内容,

我们不再通过前面移植wolfssl时做的那样通过aclocal系列操作生成configure(试过,问题很多,也许是Ubuntu里面的一些环境不一样导致的,没精力细究,不想踩坑的直接略过),而是通过执行

./autogen.sh

生成configure文件,这里面可能会提示gettext版本过低相关的错误信息(我的Ubuntu是14.04,比较久远了,gettext版本为0.18.3),切换过几个源重新安装gettext,都是提示已经最新,我们采用手动编译源码安装的方式升级到0.19.4( Index of /gnu/gettext ),解压->./configure->make->make install。重新查看gettext版本(gettext --v),提示已经是0.19.4了。

执行autogen.sh后的文件夹情况如下:

多了m4文件夹,多了aclocal.m4、config.rpath、configure几个文件。

接下来执行命令

./configure

提示如下错误

解决无果后重新依次执行如下命令

aclocal -I /usr/share/aclocal-1.14 -I /usr/share/libtool/m4 --install
autoconf
autoheader
automake --add-missing

因为通过autogen.sh的方式生成了首次通过aclocal运行提示缺少的相应文件,所以此次在执行前三行命令后都很正常,但是在执行automake时,提示如下错误:

configure.ac:34: error: required file './ltmain.sh' not found

解决方式如下:

//查看版本
libtoolize --version
//解决方法
libtoolize --automake --copy --debug -- force

当前路径下生成了ltmain.sh文件,咱接着configure

./configure --prefix=$PWD/../arm-gcc/ --host=arm-linux CC=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-gcc AR=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-ar STRIP=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-strip

提示(。。。。。)

未完,待续........

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

A few weeks later...

本来前人已经在嵌入式系统里面移植了adduser命令,同样也能实现添加用户的任务,前段时间打算就不再移植useradd了,但又有一个问题出现,如何通过程序实现添加用户后再添加密码,adduser及passwd都可以达到目的,只是需要等待系统的输入密码提示后才能手动输入,而不能通过程序直接指定(或许也有办法,暂时不清楚),只能再次继续前次未竟之事了。

各版本shadow下载网站 上找到一款2016年提交的shadow-4.4.tar.xz,解压到虚拟机非共享路径下,

里面已有现成的configure文件,

命令窗口进入到该路径,执行如下命令,进行配置(安装路径、编译工具链),生成Makefile文件,

./configure --prefix=$PWD/../arm-gcc/ --host=arm-linux CC=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-gcc AR=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-ar STRIP=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-strip

分别执行make和make install后,在指定的安装目录下生成了目标文件,

拷贝到嵌入式设备中,查看帮助,显示如下,

至此结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移植useradd到嵌入式Linux设备 的相关文章

  • __NR_gettid 和 SYS_gettid 之间的区别

    我只是在寻找在 Linux 中获取唯一线程 ID 的方法 我发现的方法是将两个参数中的任何一个作为参数进行系统调用 NR gettid OR SYS gettid 有人能解释一下它们之间有何不同吗 Nothing in
  • SDL - 窗口不显示任何内容

    我正在执行 SDL C 的第一步 并从 www sdl org 上学习了一些教程 但有一个问题 我已经在我的 Linux Mint 系统上安装了 SDL2 编译了教程代码 ifdef cplusplus include
  • 用另一个文件的标签为图表(ggplot2)中的标题添加下标

    在我的程序中 我有两个主要文件 第一个包含数据 第二个包含标签 或图形标题 文件总数1 数据 3 10000 3 32039232 1 0 0017290351 2 0 0002781092 3 10001 3 32101193 1 0 0
  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • Bash:检查是否给出了参数(例如是否有参数“-a”?)

    我有一个脚本 它应该接受 2 个参数 s 和 d 如果未给出 d 参数 我想删除我的调试文件 与 s 相同 如何检查 1 或 2 是否为 s 或 d 舒尔有两个参数 我可以做到 蛮力 if test 1 d test 2 d then rm
  • 如何从脚本编辑 /etc/sudoers?

    我需要编辑 etc sudoers从脚本中添加 删除白名单中的内容 假设我有一个可以处理普通文件的命令 我如何将其应用到 etc sudoers 我可以复制并修改它 然后有visudo用修改后的副本替换原始版本 通过提供我自己的脚本 EDI
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • Linux中如何避免sleep调用因信号而中断?

    我在 Linux 中使用实时信号来通知串行端口中新数据的到达 不幸的是 这会导致睡眠呼叫在有信号时被中断 有人知道避免这种行为的方法吗 我尝试使用常规信号 SIGUSR1 但我不断得到相同的行为 来自 nanosleep 联机帮助页 nan
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案

随机推荐

  • 专车数据层架构进化往事:好的架构是进化来的,不是设计来的

    很多年前 读了 子柳 老师的 淘宝技术这十年 这本书成为了我的架构启蒙书 书中的一句话像种子一样深埋在我的脑海里 好的架构是进化来的 不是设计来的 2015 年 我加入神州专车订单研发团队 亲历了专车数据层 架构进化 的过程 这次工作经历对
  • 锂电池管理系统(BMS)

    引言 在现代科技的推动下 锂电池已经成为各种电动设备和能源存储系统的首选能源媒介 然而 锂电池在充电和放电过程中存在一系列潜在的安全隐患 同时其性能和寿命也受到一些限制 为了解决这些问题 锂电池管理系统 BMS 应运而生 BMS不仅仅是一个
  • [2024]基于springboot的租房(房屋租赁)小程序设计

    目录 一 整体目录 示范 文档含项目技术介绍 E R图 数据字典 项目功能介绍与截图等 二 运行截图 三 代码部分 示范 四 数据库表 示范 数据库表有注释 可以导出数据字典及更新数据库时间 欢迎交流学习 五 主要技术介绍 六 项目调试学习
  • Scrum产品负责人(CSPO)认证Scrum Product Owner

    课程简介 Scrum是目前运用最为广泛的敏捷开发方法 是一个轻量级的项目管理和产品研发管理框架 产品负责人是Scrum的三个角色之一 产品负责人在Scrum产品开发当中扮演舵手的角色 他决定产品的愿景 路线图以及投资回报 他需要回答为什么做
  • MySQL忘记密码了怎么办

    MySQL忘记密码 今天在写jdbc时很悲催的发现自己的MySQL密码忘记了 没有办法了 重新设置一下密码吧 先关闭mysql服务mysql server stop 跳过权限检验 在使用该命令的时候要确保mysql服务是关闭的 不然是无法正
  • C语言环形缓冲区

    2024第一天 继续给自己加点料 导言 C语言环形缓冲区是一种常用的数据结构 它提供了一种高效的方式来存储和处理数据 本文将深入解析C语言环形缓冲区的定义 原理和应用 并提供一些实际的代码示例 一 什么是环形缓冲区 环形缓冲区 也称为循环缓
  • 比较两个信号的频率成分

    频谱相干性有助于识别频域中信号之间的相似性 大数值表示信号共有的频率分量 将两个声音信号加载到工作区中 以 1 kHz 的频率对其进行采样 使用 periodogram 计算其功率频谱 并以彼此相邻的方式对其绘图 load relateds
  • Win7系统提示找不到KBDUKX.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDUKX
  • Win7系统提示找不到KBDUR.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDUR D
  • [每周一更]-(第56期):不能不懂的网络知识

    作为程序员 在网络方面具备一定的知识和技能是非常重要的 以下是一些程序员需要熟练掌握的网络知识 基础网络概念 IP地址 了解IPv4和IPv6地址的格式和分配方式 以及常见的IP地址分类 子网掩码 理解子网掩码的作用 以及如何计算子网的大小
  • Win7系统提示找不到KBDUR1.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDUR1
  • Java版直播商城免 费 搭 建:平台规划与常见营销模式,电商源码、小程序、三级分销及详解

    saas云平台 打造全行业全渠道全场景的saas产品 为经营场景提供一体化解决方案 门店经营区域化 网店经营一体化 本地化 全方位 一站式服务 为多门店提供统一运营解决方案 提供丰富多样的营销玩法覆盖所有经营场景 助力商家成功 系统稳定压倒
  • 对 pcl::StatisticalOutlierRemoval 滤波器的理解

    对 pcl StatisticalOutlierRemoval 滤波器的理解 注 以下内容基于与 GPT 4 的交流并结合个人理解整理而成 若有描述不准确或模糊之处 欢迎指正 参数配置 setMeanK int meanK 此参数设置每个点
  • Win7系统提示找不到KBDUSA.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDUSA
  • Docker无法启动Postgresql容器

    目录 问题描述 解决问题 问题描述 拉取了一个Postgresql14 2的镜像 在 docker run 创建并运行容器之后使用 docker ps 发现容器没有跑起来 再次使用 docker start 也没跑起来 docker run
  • 太强了!利用 Python 连接 ES 查询索引某个字段命中数的脚本!

    当我们在工作中 如果频繁查询 Elasticsearch 某个索引中的某个字段命中的记录数量时 可以通过 Python 的 Elasticsearch 库来查询 从而提升工作效率 代码大致思路如下 第一步 从 elasticsearch 模
  • Java版企业电子招标采购系统源码——鸿鹄电子招投标系统的技术特点

    在数字化时代 采购管理也正经历着前所未有的变革 全过程数字化采购管理成为了企业追求高效 透明和规范的关键 该系统通过Spring Cloud Spring Boot2 Mybatis等先进技术 打造了从供应商管理到采购招投标 采购合同 采购
  • 德思特应用 | 革新MIMO无线电测试,精准测量10 MHz-8 GHz复杂射频信号!(二)

    来源 德思特测量测试 德思特应用 革新MIMO无线电测试 精准测量10 MHz 8 GHz复杂射频信号 二 原文链接 https mp weixin qq com s ScYnA3 09XT3Gp6SRg1n4Q 欢迎关注虹科 为您提供最新
  • NetCore Webapi XSRF/CSRF 跨站请求伪造过滤中间件

    XSRF Cross Site Request Forgery 和CSRF Cross Site Request Forgery 是一种常见的网络攻击方式 攻击者通过伪造请求将恶意操作发送到用户正在访问的网站 为了防止这种攻击 可以采取以下
  • 移植useradd到嵌入式Linux设备

    友情提示 前面一大段描述的是在老版本Ubuntu14 4交叉编译新版本shadow 过程曲折 没有结果 分割线后面一段是重新换了一个较老版本shadow 4 4 过程丝滑 结果喜人 诸君如耐心有限可直接划拉至分割线后部分内容 对于其他程序的