您尚未登录。

楼主 # 2022-05-09 14:40:53

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 250
积分: 311.5

WSL下编译buildroot,sysroot/usr/share/terminfo 下的目录名都是 ASCII 码,请问怎么解决?

编译报错:

/usr/bin/install -D -m 0644 /mnt/d/Program/Ubuntu/buildroot/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/share/terminfo/a/ansi /mnt/d/Program/Ubuntu/buildroot/output/target/usr/share/terminfo/a/ansi
/usr/bin/install: cannot stat '/mnt/d/Program/Ubuntu/buildroot/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/share/terminfo/a/ansi': No such file or directory

查看 sysroot/usr/share/terminfo 下内容如下:

root@wmxpc:~/win/buildroot# ls /mnt/d/Program/Ubuntu/buildroot/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/share/terminfo/
31  34  37  41  4d  51  62  65  68  6b  6e  71  74  77
32  35  38  45  4e  58  63  66  69  6c  6f  72  75  78
33  36  39  4c  50  61  64  67  6a  6d  70  73  76  7a

似乎是把目录名 a 变成了它的 ASCII 码 61,,

请问这是什么导致的??怎么解决?

离线

楼主 #1 2022-05-09 14:45:43

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 250
积分: 311.5

Re: WSL下编译buildroot,sysroot/usr/share/terminfo 下的目录名都是 ASCII 码,请问怎么解决?

我现在想到的一个可能有效的办法是,修改 buildroot\package\ncurses\ncurses.mk 下的如下部分:

NCURSES_TERMINFO_FILES = \
	a/ansi \
	d/dumb \
	l/linux \
	p/putty \
	p/putty-256color \
	p/putty-vt100 \
	s/screen \
	s/screen-256color \
	v/vt100 \
	v/vt100-putty \
	v/vt102 \
	v/vt200 \
	v/vt220 \
	x/xterm \
	x/xterm+256color \
	x/xterm-256color \
	x/xterm-color \
	x/xterm-xfree86 \
	$(call qstrip,$(BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO))

把其中的 a、d、l、p、s、v、x 等目录名改成其对应的 ASCII 码。。

但是我更想知道目录名是怎么变成 ASCII 码的,,在对应的位置修改,不让它变成 ASCII 码

离线

楼主 #2 2022-05-09 14:52:53

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 250
积分: 311.5

Re: WSL下编译buildroot,sysroot/usr/share/terminfo 下的目录名都是 ASCII 码,请问怎么解决?

网上查到有人遇到相同的问题,他的解决方法是把目录手动拷贝过去,,感觉有点儿麻烦

buildroot_ncurses.png

离线

楼主 #3 2022-05-11 00:37:35

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 250
积分: 311.5

Re: WSL下编译buildroot,sysroot/usr/share/terminfo 下的目录名都是 ASCII 码,请问怎么解决?

还没有找到目录名变成数字的根源,暂时想到一个方法避免手动拷贝,,先走通编译流程吧

找到 buildroot\package\ncurses\ncurses.mk 中如下内容:

define NCURSES_TARGET_CLEANUP_TERMINFO
	$(RM) -rf $(TARGET_DIR)/usr/share/terminfo $(TARGET_DIR)/usr/share/tabset
	$(foreach t,$(NCURSES_TERMINFO_FILES), \
		$(INSTALL) -D -m 0644 $(STAGING_DIR)/usr/share/terminfo/$(t) \
			$(TARGET_DIR)/usr/share/terminfo/$(t)
	)
endef

可知,第一个 $(t) 指定源地址,第二个 $(t) 指定目的地址,只需要将第一个 $(t) 的第一个字符转换成其 ASCII 码数字应该就可以编译了

不懂 shell 怎么处理字符串,,用 python 处理,改成如下内容:

define NCURSES_TARGET_CLEANUP_TERMINFO
	$(RM) -rf $(TARGET_DIR)/usr/share/terminfo $(TARGET_DIR)/usr/share/tabset
	$(foreach t,$(NCURSES_TERMINFO_FILES), \
		$(INSTALL) -D -m 0644 $(STAGING_DIR)/usr/share/terminfo/$(shell python3 -c \
			"import sys; t = sys.argv[1]; t = f'{ord(t[0]):x}{t[1:]}'; print(t)" ${t}) \
			$(TARGET_DIR)/usr/share/terminfo/$(t)
	)
endef

离线

楼主 #4 2022-05-11 11:02:44

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 250
积分: 311.5

Re: WSL下编译buildroot,sysroot/usr/share/terminfo 下的目录名都是 ASCII 码,请问怎么解决?

编译完成了,,成功生成了 sdcard.img,,

没有遇到其他网友说的需要“用fakeroot-tcp替换fakeroot-sysv”的问题

过程还算顺利,,就遇到两个问题,,除了楼上那个问题,,另一个是 WSL 中 Ubuntu 的 PATH 会包含 Windows 的 PATH,,而 Windows 的 PATH 路径可能包含空格,,导致编译出错,,解放方法是使用 “PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make” 临时覆盖 PATH

看起来 WSL 下编译 Buildroot 还是可行的。。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn