linux系统中,vdso(Virtual Dynamic Shared Object)是一个特殊的共享库,它被内核加载到进程地址空间中,提供了一些与内核交互的系统调用接口,以提高系统调用的效率和安全性。vdso.so.1是vdso的动态链接库文件,它在系统启动时随内核一起加载,并被放置在一个特定的安装路径中。
vdso.so.1安装路径解析
vdso.so.1的安装路径是系统内核预定义的,它在Linux系统中存在于两个不同的位置:/lib/ld-linux.so.2和/lib64/ld-linux-x86-64.so.2。这两个库文件是系统动态链接器的实现,负责从磁盘上加载动态链接库,构建进程运行时的内存映像,以及执行程序的入口点。
在32位系统中,vdso.so.1被安装在/lib/ld-linux.so.2路径下。这个路径下还包括一些系统基础库文件,如libc.so.6、libdl.so.2、libpthread.so.0等。这些库文件是系统的必要组件,没有它们,许多应用程序无法运行。而vdso.so.1作为一个虚拟库存在,它不在磁盘上保存任何文件,而是作为内核的一部分,随时可以加载进进程地址空间中。
在64位系统中,vdso.so.1被安装在/lib64/ld-linux-x86-64.so.2路径下。这个路径下包括了一些64位系统专有的库文件,如lib64c.so.6、lib64pthread.so.0、lib64m.so.6等。它们与32位系统下的库文件类似,都是系统的基础组件,必不可少。同时,vdso.so.1的存在也是为了提高系统效率,因为它有一些比传统系统调用更快的机制,对于一些频繁使用的系统调用而言,可以大幅提高程序的执行效率。
vdso.so.1的作用与意义
vdso.so.1作为系统的重要组成部分之一,承担了许多重要的作用和意义。它提供了一些比传统系统调用更快的机制,如gettimeofday和time等函数,它们都是高频率调用的系统调用,通过vdso.so.1优化后可以更快地执行。vdso.so.1可以在内核态和用户态之间进行快速的切换,在系统实现高并发和多线程处理的时候,可以提高系统运行效率。vdso.so.1也是系统安全性的重要保证,它通过一些机制,如地址空间布局随机化(ASLR)等,为应用程序提供了强大的保护,从而防止攻击者利用一些漏洞进行攻击。
vdso.so.1在Linux系统中扮演着重要的角色,它通过提供快速的系统调用和安全的保护机制,为应用程序提供了高效、安全和可靠的环境。尽管它不是一个真正的文件,但它是系统的核心组成部分之一,为系统的稳定性和安全性做出了重要贡献。同时,理解vdso.so.1的安装路径和作用,对于Linux系统的学习和研究也具有重要的意义。
相关问题拓展阅读:
- Ubuntu 12.04 下安装 openGL 驱动时,究竟做了什么事
- linux下ld连接SO文件时如何制定绝对路径
Ubuntu 12.04 下安装 openGL 驱动时,究竟做了什么事
Ubuntu 下安装 openGL 驱动的确把我折腾惨了
本人机器是 HP 的使用 i5 的集成显卡
下载了 intel 的 installer (intel-linux-graphics-installer_1.0.1_amd64.deb ),他们不支持 Ubuntu 12.04, 只支持 13.x
找了个 ATI x1300 的老显卡,官方的驱动(ati-driver-installer-9-3-x86.x86_64.run)只支持了 Ubuntu 8.x 9.x (让我深感,计渗拆算机真是消费品,过时了就用不起来了 )
只好买了一个 Nvidia GT610 显卡,下载官方的 NVIDIA-Linux-x86_64-331.49.run, 顺利装上了
这驱动做了如下的事情:
1) 把驱动装到 Kernel 中 ( 我升级了 Kernel ,又了重装驱动 )
2) 把 /usr/lib/libGL.so 替换为 Nvidia 的(用 ldd 看就知道了),当然要把nvidia 自己的 so 也copy 到,这几个目录
view plaincopy在CODE上查看代码片派生到我的代码片
ldd /usr/巧喊指lib/libGL.so
linux-vdso.so.1 => (0x00007fffe91ff000)
libnvidia-tls.so.331.49 => /usr/lib/tls/libnvidia-tls.so.331.49 (0x00007fa1a58c0000)
libnvidia-glcore.so.331.49 => /usr/lib/libnvidia-glcore.so.331.49 (0x00007fa1a30b1000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa1a2d7b000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fa1a2b6a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa1a27aa000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa1a25a5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa1a22a9000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa1a208b000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa1a5e15000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa1a1e87000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa1a1c81000)
对于 i386 的支持库,放在/usr/lib32中
view plaincopy在CODE上查看代码片派生到我的代码片
ldd /孝配usr/lib32/libGL.so
linux-gate.so.1 => (0xf)
libnvidia-tls.so.331.49 => /usr/lib32/tls/libnvidia-tls.so.331.49 (0xf75f1000)
libnvidia-glcore.so.331.49 => /usr/lib32/libnvidia-glcore.so.331.49 (0xf53ac000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf50bb000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf50b6000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf508a000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf)
/lib/ld-linux.so.2 (0xf)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf505d000)
开发 Android 时使用 , Android 使用 i386是从 /usr/lib/i386-linux-gnu 装载
所以要把 lib32 中所有文件复制到 /usr/lib/i386-linux-gnu
3) Xorg相关
Xorg是开源的 Xserver 实现
nvidia 要与Xorg集成的库,放在usr/lib/xorg/modules下面,并改下 /etc/X11 下面的东西
xorg.conf
让 Xorg加载 so
view plaincopy在CODE上查看代码片派生到我的代码片
Section “Module”
Load”record”
Load”extmod”
Load”dbe”
Load”dri2″
Load”glx”
EndSection
装载 /usr/lib/xorg/modules/extensions/ 下面的 libglx.so, libdri2.so 等
让 Xorg 加载 nvida 驱动
view plaincopy在CODE上查看代码片派生到我的代码片
Section “Device”
Identifier “Card0”
Driver”nvidia”
BusID”PCI:1:0:0″
EndSection
附带转帖
Ubuntu通过重新生成/etc/X11/xorg.conf文件来调整分辨率
1. Ctrl+Alt+F1 , sudo service gdm stop
2. sudo Xorg -configure (生成文件 ~/xorg.conf.new)
3. sudo service gdm start
4. mv ~/xorg.conf.new /etc/X11/xorg.conf
5. gtf-x
6. 然后将上一步中gtf命令生成的内容:
Modeline “1280x1024_60.00” 108.60 -HSync +Vsync
插入到/etc/X11/xorg.conf中:
Section “Monitor”
Identifier “Monitor0”
VendorName “Monitor Vendor”
ModelName “Monitor Model”
Modeline “1280x1024_60.00” 108.60 -HSync +Vsync
EndSection
重新启动X。搞定。
如果不想生成xorg.conf文件,并且只想临时的调整分辨率,那么可以按照如下方法实现:
cvt
sudo xrandr –newmode “1280x1024_60.00” 109.63 -hsync +vsync
sudo xrandr –addmode VGA1 “1280x1024_60.00”
sudo xrandr –output VGA1 –mode “1280x1024_60.00”
linux下ld连接SO文件时如何制定绝对路径
连接器使用下面的搜索路径来定位需要的共享库: 1. 所有由”-rpath-link”选项指定的搜索路径. 2. 所有由”-rpath”指定的搜索路径. “-rpath”跟”-rpath_link”的不同之处在于,由”-rpath”指定的路径被包含在可执行文件中,并在运行时使用, 而”-rpath-link”选项仅仅在连接时起作用. 它只用槐或于本地连接器. 3. 在一个ELF系统中, 如果”-rpath”和”rpath-link”选项没有被使用, 会搜索环境变量”LD_RUN_PATH”的内容.它也只对本地连接器起作用. 4. 在SunOS上, “-rpath”选项不使用, 只搜索所有由”-L”指定的目录. 5. 对于一个本地连接器,环衫明友境变量”LD_LIBRARY_PATH”的内容被搜索. 6. 对于一个本地ELF连接器,共享库中的`DT_RUNPATH”和`DT_RPATH”操作符会被需要它的共享库搜索. 如果”DT_RUNPATH”存在了, 那”DT_RPATH”就会被忽略. 7. 缺省目录, 常规或槐的,如”/lib”和”/usr/lib”. 8. 对于ELF系统上的本地连接器, 如果文件”/etc/ld.so.conf”存在, 这个文件中有的目录会被搜索.
如上所述,可以用”-rpath-link”,”-rpath”,或者文件”/etc/ld.so.conf”来指定。
关于linux vdso.so.1位置的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。