从0开始学linux韦东山教程第四章问题小结(5)
本人从0开始学习linux,使用的是韦东山的教程,在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。说实在的越看视频越感觉他讲的有点乱后续将以他的新版PDF手册为中心,视频作为辅助理解的工具。参考手册为嵌入式Linux应用开发完全手册V5.3_IMX6ULL_Pro开发板。
摘要:这节课中文档内容非常少,后续我将视频看完后,写的这节博客。这节博客主要讲的是,查看任务节点,上传tslib-1.21文件在文件上传使容易遇见的小错误,编译tslib-1.21文件包并测试,tslib库写手指距离测量代码,也是从这章开始我的开发板再也回不到以前的亮屏状态,但是其他功能可以正常实现。
摘要关键词:任务节点、tslib-1.21
本文详细介绍以下问题,如果你遇到了以下问题,看看我的方案能否解决。
1.查看任务节点
2.上传tslib-1.21文件
3.编译tslib-1.21文件包并测试
4.tslib库写手指距离测量代码
1.查看任务节点
lsof /dev/input/event*
你的节点不对反馈的消息是有问题的。
2.上传tslib-1.21文件
tar xvf tslib-1.21.tar
解压的时候得注意,千万不要用win11解压后在上传给ubuntu,这样会出现权限不足以及没有这个命令等一系类问题。至于为什么会导致这个问题,本人猜测应该是win11中环境不一样肯定产生了别的东西。
3.编译tslib-1.21文件包并测试
./configure --host=arm-buildroot-linux-gnueabihf --prefix=/
make
make install DESTDIR=$PWD/tmp
./configure --host=arm-buildroot-linux-gnueabihf --prefix=/:这个命令用于配置编译环境,为你的系统生成一个适合的 Makefile。在运行 make 之前,通常需要先运行
–host=arm-buildroot-linux-gnueabihf:这是一个交叉编译的选项,告诉配置脚本你希望构建的目标系统是 arm-buildroot-linux-gnueabihf
–prefix=/:这个选项告诉 configure 安装程序将程序安装到 / 目录下
make:这个命令基于 Makefile 编译软件。
make install:这个命令将编译完成的软件安装到你指定的目录。
DESTDIR=$PWD/tmp:这个选项用于修改安装目标路径。也就是安装到相对路径的tmp中了
echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -
1. echo ‘main(){}’:这个命令会将字符串 ‘main(){}’ 输出到标准输出(通常是终端)。‘main(){}’ 是一个简单的 C 程序的主体部分,表示一个空的 main 函数。
2. |:管道符,用于将前一个命令的输出传递给下一个命令作为输入。在这个例子中,echo ‘main(){}’ 的输出被传递给 arm-buildroot-linux-gnueabihf-gcc 命令。
3. arm-buildroot-linux-gnueabihf-gcc:这是一个交叉编译器,它用于将 C 代码编译为针对 ARM 架构的机器代码。这个交叉编译器的名称中包含了 arm、gnueabihf(表示硬件浮点支持),因此它用于生成 ARM 架构的二进制代码。
4. -E:这是 gcc 编译器的一个选项,表示只进行预处理阶段(Preprocessing),即仅处理宏替换、头文件包含、条件编译等操作,而不进行编译和链接。输出的是预处理后的代码。
5. -v:这个选项会让编译器在执行时输出详细的调试信息,包括编译器的版本、路径信息以及在编译过程中使用的命令等。
总结就是这行指令是确定工具链中头文件、库文件目录的
cd tslib-1.21/tmp/
cp include/* /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include
cp -d lib/*so* /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/../../../../arm-b
uildroot-linux-gnueabihf/lib
cp include/* /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include:这条命令将 include 目录下的所有文件复制到目标路径 /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include 目录
cp -d lib/so /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/…/…/…/…/arm-buildroot-linux-gnueabihf/lib:这条命令将 lib 目录下所有包含 .so 字符串的文件复制到目标路径。
目标路径是 /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf/lib,这个路径指向编译工具链的库文件存放位置。
架构不匹配:
如果你在 x86 系统上尝试运行 ARM 架构的二进制文件(比如从交叉编译中得到的文件),就会出现此错误。
同样,如果你在 ARM 设备上尝试运行为 x86 架构编译的二进制文件,也会出现类似错误。
解决办法:确认目标平台和二进制文件的架构是否匹配,就是最开始忘记输入那3行命令行了。
再然后重新完成一遍配置流程后,打开root发现ls没有输出,稀奇古怪。然后我跟着视频尝试打开文件地址发现就没有,最后还是按照手册测试成功的,一定要按照手册来。
4.tslib库写手指距离测量代码
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/binarm-buildroot-linux-gnueabihf-gcc -o mt_cal_distance mt_cal_distance.c -ltsadb push mt_cal_distance /root
./mt_cal_distance
最开始出现上图的错误的时候是由于没有 -lts,所以没有找到这个函数。
-lts 表示编译时链接 libts 库。这是一个简写形式,通常与某些特定功能相关,像是事件时间戳、实时系统相关的功能等。