Linux深入内核理解文件IO(内核版本:common-android13-5.15)

首先需要写一个例子:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char **argv) 
{
    int fd = open(argv[1], O_RDONLY);
    if (fd == -1)
    {
        printf("open %s error\n", argv[1]);
    }
    printf("fd = %d\n", fd);
    while (1)
    {
        sleep(100);
    }
    return 0;
}

然后利用上一篇博客:Makefile简单使用及解读韦东山的通用Makefile实例中的Makefile来编译这个C文件。
如下,已经编译好并且分别用编译出来的test打开编译程序本身test和Makefile文件,打印出来的fd都是=3。

virtual-machine:~/Linux_study$ tree open_test/
open_test/
├── Makefile
├── Makefile.build
└── open_test.c
virtual-machine:~/Linux_study/open_test$ make
virtual-machine:~/Linux_study/open_test$ tree .
.
├── built-in.o
├── Makefile
├── Makefile.build
├── open_test.c
├── open_test.o
└── test
virtual-machine:~/Linux_study/open_test$ ./test test &
[3] 1104878
virtual-ma
<think>好的,用户现在在树莓派上安装code:arm64时遇到了依赖问题,系统是aarch64的。我之前已经给出了一些解决方案,现在用户又提供了新的引用链接,但需要结合之前的回答来处理。 首先,用户确认系统是aarch64,也就是64位的,所以之前的架构问题可能已经解决。不过依赖问题依然存在,可能是因为软件源的问题或者某些包没有正确安装。 用户提供的引用[1]中提到了安装libgail-common、libatk-adaptor和libcanberra-gtk-module,这些可能和图形界面有关,但用户当前的错误信息里并没有提到这些包,所以需要判断是否相关。引用[2]是关于安装Ubuntu桌面的步骤,可能和当前问题关联不大,但用户提到不要贸然更换镜像源,这可能提示我需要考虑软件源是否正确。 回顾之前的回答,我建议用户启用多架构支持,添加arm64架构,并安装指定的依赖包。用户现在可能已经执行了这些步骤,但问题仍然存在。可能需要进一步检查软件源是否包含所需的arm64包,或者是否存在版本冲突。 接下来需要考虑的步骤:首先确认用户是否已经正确启用了多架构支持,然后检查软件源是否有arm64的仓库,特别是VSCode的仓库是否正确配置。另外,用户可能需要手动安装缺失的依赖包,或者尝试使用预编译的.deb文件来绕过依赖问题。 还需要注意用户是否在混合架构环境下操作,比如系统是64位,但某些库还是32位的,导致冲突。这时候可能需要强制使用arm64的包,或者更新所有库到64位。 另外,用户提供的引用[1]中的包可能不是直接相关的,但如果安装后能解决某些依赖,可以尝试。不过需要确保这些包是针对arm64架构的,否则可能引起更多问题。 最后,可能需要建议用户清理apt缓存,更新软件源,然后使用apt的-f install来修复损坏的依赖,或者使用--fix-broken选项。如果所有方法都失败,可以建议使用容器化部署或下载预编译包作为替代方案。</think>根据您提供的系统信息(aarch64架构)和依赖报错,以下是优化后的解决方案: --- ### 一、基础验证步骤 1. **确认架构状态** ```bash # 验证内核架构(应显示aarch64) uname -m # 检查已启用的系统架构(应包含arm64) dpkg --print-architecture dpkg --print-foreign-architectures ``` 2. **清理残留配置** ```bash sudo apt remove --purge code sudo rm /etc/apt/sources.list.d/vscode.list ``` --- ### 二、专用修复流程 #### ▶ 核心依赖修复(融合引用[1][^1]) ```bash # 安装跨平台支持库(修正引用[1]方案) sudo apt install \ libgail-common:arm64 \ libatk-adaptor:arm64 \ libcanberra-gtk-module:arm64 \ libasound2:arm64 \ libatk1.0-0:arm64 \ libatspi2.0-0:arm64 \ libcairo2:arm64 \ --no-install-recommends ``` #### ▶ 多仓库配置(关键步骤) ```bash # 添加ARM64专用源 echo "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal-updates main restricted" | \ sudo tee /etc/apt/sources.list.d/arm64-focal.list # 添加微软官方源(需密钥验证) curl -sSL https://packages.microsoft.com/keys/microsoft.asc | \ sudo gpg --dearmor -o /usr/share/keyrings/microsoft.gpg echo "deb [arch=arm64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | \ sudo tee /etc/apt/sources.list.d/vscode.list ``` #### ▶ 强制同步更新 ```bash # 按架构重建缓存 sudo apt update -o APT::Architectures="arm64" sudo apt install -y code:arm64 --fix-broken ``` --- ### 三、高级调试方法 1. **依赖树分析** ```bash # 显示完整依赖关系 apt-cache depends code:arm64 | grep -E '依赖|推荐|建议' # 检查具体软件包状态 dpkg -l | grep -E 'libasound2|libatk|libcairo' ``` 2. **手动下载安装(当仓库不可用时)** ```bash # 从官方仓库直接获取deb包 wget http://ftp.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_arm64.deb sudo dpkg -i --force-architecture libasound2_*_arm64.deb ``` --- ### 四、系统级验证 ```bash # 检查动态库链接状态(关键验证) ldd /usr/share/code/code | grep 'not found' # 验证GLIBC版本(需≥2.28) ldd --version | grep ldd ``` --- ### 五、替代方案建议 1. **容器化安装(避免污染系统环境)** ```bash # 使用podman隔离运行 podman run -it --rm \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY \ docker.io/library/debian:bullseye-slim \ bash -c "apt update && apt install -y code && code" ``` 2. **使用预编译二进制包** ```bash wget https://update.code.visualstudio.com/latest/linux-deb-arm64/stable -O code_arm64.deb sudo dpkg --add-architecture arm64 sudo apt install ./code_arm64.deb ``` --- ### 六、常见失败原因 1. **混合架构污染**:系统残留32位软件包(可用`apt purge ".*:armhf"`清理) 2. **签名验证失败**:需确保微软GPG密钥已正确安装(参考步骤二) 3. **内核兼容性问题**:树莓派OS需使用5.15+内核(`uname -r`验证) [^1]: 该方案通过显式指定架构安装GTK适配库,可解决Atk相关依赖缺失问题 [^2]: Ubuntu ports仓库为ARM架构软件包提供更完整的依赖链支持
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值