现在位置: 首页 > linux编程
系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行。处理器设有两种模式:“用户模式”与“内核模式”。一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I/O操作,修改基址寄存器内容等。而连接用户模式和内核模式的接口称之为系统调用。 应用程序代码运行在用户模式下,当应用程序需要实现内核模...
阅读全文
2019-05-04 06:49 工业·编程 ⁄ 共 16360字 暂无评论
——linux版本: 3.14.38 netlink支持用户进程和内核相互交互(两边都可以主动发起),同时还支持用户进程之间相互交互(虽然这种应用通常都采用unix-sock) 但是有一点需要注意,内核不支持接收netlink组播消息 本文将从用户进程发送一个netlink消息开始,对整个netlink消息通信原理进行展开分析 用户进程一般都通过调用sendmsg来向内核或其他进程发送netlink消息(有关sendmsg系统调用的公用部分代码解析将在另一片文章中展开) &...
阅读全文
2019-05-03 06:41 工业·编程 ⁄ 共 12226字 暂无评论
——linux版本:3.14.38 目前为止,netlink协议族支持32种(MAX_LINKS)协议类型,其中已经被预定义的有22种。 在实际项目中,如果有定制化的需求时,最好不要去占用剩下的暂未定义的协议类型ID号,而是使用预定义的通用netlink协议类型NETLINK_GENERIC来进行扩展。 LINUX中跟netlink相关的核心代码位于net/netlink目录中,其中核心头文件主要有3个(这些都是所有协议类型的netlink共享的):       &#...
阅读全文
2019-05-02 06:36 工业·编程 ⁄ 共 6298字 暂无评论
内核版本:3.14.38 netlink是一种用于内核态和用户态进程之间进行数据传输的特殊的IPC机制。 特点:     1) 用户态采用socket风格的API     2) 除了预定义的协议类型之外,支持自定义协议类型     3) 异步通讯     4) 支持消息组播     4) 全双工(特别是支持内核主动发起会话) netlink涉及的数据结构:     1) netlink地址...
阅读全文
2019-01-05 21:27 工业·编程 ⁄ 共 298字 暂无评论
与“非阻塞模式”相关的有两个 标志,就是 O_NONBLOCK与O_NDELAY,这两种参数的结果都是使I/O操作设置为“非阻塞模式”,也就是non-blocking,当进行read/write操作时,不管结果如何,都会马上返回,而不会阻塞。 他们的区别是:在read时,如果读不到数据,O_NDELAY会返回0,由于正常读取到文件末尾时,也会返回0,这样就无法区分是否是遗产隔离,所以就引入了O_NONBLOCK,在读不到数据时,返回-1,并且设置errno为EAGAIN,而读到结尾...
阅读全文
2019-01-03 21:15 工业·编程 ⁄ 共 551字 暂无评论
关于函数fcntl的参数讲解的比较多,但是这个函数功能只有简单的一句话“fcntl函数可以改变已经打开文件的属性”。 我们知道,在Unix/linux环境下,不管是设备、I/O、socket等等,几乎一切都是文件,所以fcntl的功能就是对于这些设备、文件、I/O的属性进行设定,比如常用的功能: 1、复制一个已有的描述符,类似于dup函数功能。 2、获取/设置文件描述符标志。 3、获取/设置文件状态标志。 4、获取/设置一步I/O所有权。 5、获取/设...
阅读全文
1、静态库和动态库的区别 (1)所谓静态库(*.a),就是程序link的时候就把静态库中的东西取出来,放到生成的可执行文件中,当这个可执行文件执行时,就不需要再次调用这个静态库了。 (2)所谓动态库(*.so),就是程序link的时候,只是将库中的 符号包含,并没有包含静态库里的内容,等到可执行程序在执行 时,需要依赖动态库中的内容,也就是“随用随取”。 (3)在linux编程中,对于静态库和动态库,在makefile中引用方式一模...
阅读全文
2018-12-29 20:55 工业·编程 ⁄ 共 548字 暂无评论
由于在linux中,内核空间和用户空间的内存是不能之间互相访问的,所以需要借助上面2个函数完成数据传输。    copy_to_user:从内核空间复制数据到用户空间    copy_from_user:从用户空间复制数据到内核空间。 在进行驱动相关程序设计时,经常会用到这两个函数,因为底层驱动显然是内核空间,调用驱动的是用户空间。 具体函数模型解释如下: unsigned long copy_to_user(void __user *to, const void *from, u...
阅读全文
2018-11-20 17:18 工业·编程 ⁄ 共 372字 暂无评论
在开始学习嵌入式Linux的时,由于Linux是一种全新的操作系统,跟我们曾经熟悉的Windows的学习思路完全不同,所以在学习的过程中看不到目的,不知道从何开始,不知道为什么学,不知道学什么,所以总结一下嵌入式Linux开发流程,举例,现在手上有一块开发板,那么我们应该怎么进行嵌入式Linux开发呢,流程如下: 1.移植bootloader,如u-boot,vivi等。 2.裁剪Linux。 3.移植Linux。 4.制作根文件系统。 5.移植文件系统。 6.开发LC...
阅读全文
一、 在Windows下比较流行的GCC移植版主要有三个。他们是 MinGW,Cygwin和Djgpp。 1.MinGW 的主要方向是让GCC的Windows移植版能使用Win32API来编程。 (使用Win32API的代码可用MinGW的gcc编译,有点像用Linux开发环境开发Windows程序     如果你只是想在windows下使用gcc编译器也不想依赖其他的dll,mingw是很好的一个选择。 ) 2.Cygwin 的目标是能让Unix下的程序代码在Windows下直接被编译。 (模拟Linux环...
阅读全文