当前位置: 首页 > news >正文

dropbear交叉编译移植记录

dropbear交叉编译移植记录

dropbear 默认支持 zlib(用于压缩),如果特殊场景下需要关闭,可以在执行configure的时候加上 --disable-zlib参数

zlib交叉编译

  • 下载解压zlib
wget https://zlib.net/current/zlib.tar.gz tar-zxf zlib.tar.gz
  • 编译
mkdir install_zlib#创建安装目录export PATH=$PATH:/home/LRX/tools/toolchains/gcc-linaro-11.3.1-2022.06-x86_64_arm-linux-gnueabihf/bin#导出编译链环境变量CC=arm-linux-gnueabihf-gcc \ AR=arm-linux-gnueabihf-ar \./configure--prefix=/home/LRX/libraries/zlib-1.3.2/install_zlib make make install

dropbear交叉编译

  • 下载解压dropbear
wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2022.83.tar.bz2 tar-jxvf dropbear-2022.83.tar.bz2
  • 编译
CPPFLAGS="-I/home/LRX/libraries/zlib-1.3.2/install_zlib/include"LDFLAGS="-L/home/LRX/libraries/zlib-1.3.2/install_zlib/lib"./configure--prefix=/home/LRX/libraries/dropbear-2022.83/install_dropbear--host=arm-linux-gnueabihf CC=/home/LRX/tools/toolchains/gcc-linaro-11.3.1-2022.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc make make install make scpcpscp install_dropbear/bin

移植到板卡

修改原有rootfs

  • 移植dropbear
cd install_dropbearcpsbin/dropbear ${YOUR_ROOTFS_PATH}/mini_rootfs/usr/sbincpbin/*${YOUR_ROOTFS_PATH}/mini_rootfs/usr/bin
  • 移植libz库
cplibz.so.1.3.2 ${YOUR_ROOTFS_PATH}/mini_rootfs/lib ln-s/lib/libz.so.1.3.2/lib/libz.so.1
  • 在板卡上执行
mkdir-p/etc/dropbear cd/etc/dropbear dropbearkey-t rsa-f/etc/dropbear/dropbear_rsa_host_key dropbearkey-t dss-f dropbear_dss_host_key
  • dropbear自动开机配置
    我的rootfs是busybox编译出来的,需要增加自启动脚本,步骤如下:
cd/etc/init.d/ touch S99dropbear
#!/bin/shDROPBEAR=/usr/sbin/dropbear DROPBEARKEY=/usr/bin/dropbearkey PIDFILE=/var/run/dropbear.pid KEY_DIR=/etc/dropbear RSA_KEY=$KEY_DIR/dropbear_rsa_host_keystart(){echo"Starting dropbear..."mkdir-p$KEY_DIRmkdir-p/var/run# 生成 RSA keyif[!-f$RSA_KEY];thenecho"Generating RSA key..."$DROPBEARKEY-t rsa-f$RSA_KEYfi# 启动$DROPBEAR-R-p 22-P$PIDFILEecho"dropbear started"}stop(){echo"Stopping dropbear..."if[-f$PIDFILE];thenkill$(cat$PIDFILE)rm-f$PIDFILEelsekillall dropbear 2>/dev/null fiecho"dropbear stopped"}restart(){stopsleep1start}status(){ifpidof dropbear >/dev/null;thenecho"dropbear is running"elseecho"dropbear is stopped"fi}case"$1"instart)start;;stop)stop;;restart)restart;;status)status;;*)echo"Usage:$0{start|stop|restart|status}";;esacexit0

执行/etc/init.d/S99dropbear start临时测试
至此dropbear移植完成

  • 移植过程遇到问题及临时解决方案

(1) zlib编译CC环境变量没设置成功导致使用本机gcc编译

避坑建议:zlib 的 configure 不支持 CC=xxx 写在后面,必须写在前面


(2)devpts 未自动挂载导致无法通过/dev/pts文件节点访问终端设备

# dropbear -F -R -p 22 -d /etc/dropbear/dropbear_dss_host_key -r /etc/dropbear/dropbear_rsa_host_keyJan 1 00:26:21 smios-initramfs authpriv.info dropbear[196]: Not backgrounding Jan 1 00:26:25 smios-initramfs authpriv.info dropbear[197]: Child connectionfrom192.168.1.98:65234 Jan 1 00:26:27 smios-initramfs authpriv.notice dropbear[197]: Password auth succeededfor'root'from192.168.1.98:65234 Jan 1 00:26:27 smios-initramfs authpriv.info dropbear[198]: Child connectionfrom192.168.1.98:65237 Jan 1 00:26:27 smios-initramfs authpriv.warn dropbear[197]: pty_allocate: openpty: No such file or directory Jan 1 00:26:27 smios-initramfs authpriv.warn dropbear[197]: No pty was allocated,couldn't execute Jan 1 00:26:27 smios-initramfs authpriv.info dropbear[197]:Exit(root)from<192.168.1.98:65234>: Exited normally Jan 1 00:26:27 smios-initramfs authpriv.info dropbear[198]:Exitbefore authfrom<192.168.1.98:65237>: Exited normally ^X^CJan 1 00:26:35 smios-initramfs authpriv.info dropbear[196]: Earlyexit: Terminated by signal

报错显示我没有/dev/pts目录
执行临时命令测试:

mkdir/dev/ptsmount-t devpts devpts/dev/pts

临时解决方案如下:
在/etc/init.d/rcS文件之后添加:

[-d/dev/pts]||mkdir-p/dev/ptsmount-t devpts devpts/dev/pts
http://www.jsqmd.com/news/567534/

相关文章:

  • 通过信道优化数据传输的通信链路的实现附Matlab代码
  • 199.Vue3 + OpenLayers 实现:点击 / 拖动地图播放音频
  • 射频电路设计中的阻抗匹配原理与实践
  • 每周一个开源项目 #6:LlamaEdge 轻量本地大模型部署工具
  • 深求·墨鉴保姆级教程:从安装到使用,打造你的个人数字文房
  • 视觉感知升维:RGB+EVS 硬件融合的新基准
  • Janus-Pro-7B开发环境搭建:Ubuntu20.04系统配置全攻略
  • ”测试开发全日制学徒班7期第2天“-Linux常用命令之帮助命令
  • FUTURE POLICE语音模型Java八股文实践:设计模式在语音服务中的应用
  • 深入解析Apk安装后桌面图标缺失的CATEGORY_LAUNCHER与LEANBACK_LAUNCHER机制
  • HarmonyOS6 ArkTS ListItemGroup设置Header/Footer
  • 别再买错千元投影! 哈趣Q1Pro藏看越级体验
  • 突破Web墨卡托限制:Mapbox-gl.js v2.15.0 自定义坐标系扩展实战
  • 避坑指南:PyTorch模型保存时选torch.save还是state_dict?5个实际项目经验总结
  • 低噪声放大器设计中的常见误区与优化技巧:如何避免噪声系数飙升
  • OpCore-Simplify:智能重构黑苹果配置流程的效率革命
  • Unity微信小游戏打包后,如何用七牛云CDN加速资源加载(附完整配置流程与避坑点)
  • Claude Code 源码泄漏:想研究的赶紧 fork,可能随时消失
  • Win10下QTTabBar安装全攻略:解决.NET 3.5报错0x80240438的终极方案
  • IPXWrapper焕新攻略:让经典游戏在Windows 11完美联机
  • CanFestival主站PDO配置避坑指南:以Kinco FD伺服的速度/位置模式控制为例
  • HarmonyOS6 ArkTS ListItemGroup设置多列布局
  • Sunshine:5步打造你的专属游戏串流服务器,随时随地畅玩PC大作
  • Lingbot 模型与 Dify 集成:构建无需编码的深度图生成 AI 应用
  • MoveIt!与Gazebo联调实战:手把手教你配置controllers_gazebo.yaml(附常见报错修复)
  • 从仿真到实车:解析Fast-LIO2定位中坐标系缺失的排查与修复
  • AI绘画新手指南:用FLUX.1和SDXL风格,轻松生成高质量图片
  • 程序员转型AI大模型全攻略:告别焦虑,抢占时代红利
  • Qwen3.5-2B轻量化部署:单卡3090上同时运行3个实例的资源分配方案
  • JavaScript 开发 - Object 的 hasOwn 方法