现在位置: 首页 > 自动控制 > 文章
D 不可中断的深度睡眠状态 Uninterruptible sleep(Usually IO) R 正在运行或者在队列中的进程(就绪态) S 处于休眠状态 T 暂停或被追踪 Z 退出状态,僵尸进程 X 退出状态,进程即将被销毁 < 高优先级 N 低优先级 L 有些页被锁进内存 s 包含子进程 + 位于后台的进程组 I 多线程,克隆线程
阅读全文
2018-12-02 19:05 工业·编程 ⁄ 共 666字 暂无评论
受单片机和ARM7等小型CPU设备编程思维的影响,开始对嵌入式linux和PC中存在bootloader/BIOS的意义有了疑问 bootloader到底有没有必要存在呢?答案是:大部分情况下是有必要的。 首先,bootloader的作用是在硬件上电后运行的第一段软件代码,也叫引导加载程序,是在操作系统内核运行之前运行的一小段程序,这小段程序的作用一般是初始化硬件设备,比如内存啊,堆栈等等,从而将系统的硬件环境编程一种合适的状态,然后再引导加载...
阅读全文
2018-11-30 19:02 工业·编程 ⁄ 共 287字 暂无评论
linux命令ln用来为文件创建链接,链接这一概念类似于windows中的“快捷方式”,链接类型分为硬链接和软链接,命令格式: ln  (参数) 源文件   链接        默认是创建硬链接,而参数-s为软链接。 所谓硬链接,就是在本目录中或者另外目录中增加了原文件的另外一个名字文件,其实是名字,因为对于linux来说,链接是名字,而数据才是真正占用物理存储的,修改源文件或者链接文件其一...
阅读全文
2018-11-25 18:01 工业·编程 ⁄ 共 210字 暂无评论
modules:         $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成KO文件。
阅读全文
2018-11-23 17:54 工业·编程 ⁄ 共 1635字 暂无评论
在具体的设备驱动开发中,将驱动编译为内核模块也有很强的工程意义,因为如果将正在开发中的驱动直接编译入内核,而开发过程中会不断修改驱动的代码,则需要不断地编译内核并重启内核,但是如果编译为模块,则只需要rmmod并insmod即可,开发效率大为提高。下面说明如何添加、编译并允许LINUX模块。 除此之外还有好多有用的功能比如KVM虚拟化,都是以内核模块的方式动态地添加到内核中的。       LINUX...
阅读全文
2018-11-21 17:20 工业·编程 ⁄ 共 613字 暂无评论
在学习Qt开发之前,需要区分一些概念,这些概念由于名字太过相似,功能也太难懂,所以容易混淆。 Qt是一个完整的C++应用程序开发框架(库或架构),它的API在所有的平台上(Linux,Windows等)是相同的,这就表示Qt工具在所有平台上的使用方式是一致的,因而Qt的应用程序开发和平台是无关的。 Qt:泛指Qt的所有版本的图形界面库,注意重点是“库”,由于Qt最早是在Linux中随着KDE流行的,所以通常所说的Qt都是指用于Linux/Unix的Q...
阅读全文
2018-11-20 17:18 工业·编程 ⁄ 共 372字 暂无评论
在开始学习嵌入式Linux的时,由于Linux是一种全新的操作系统,跟我们曾经熟悉的Windows的学习思路完全不同,所以在学习的过程中看不到目的,不知道从何开始,不知道为什么学,不知道学什么,所以总结一下嵌入式Linux开发流程,举例,现在手上有一块开发板,那么我们应该怎么进行嵌入式Linux开发呢,流程如下: 1.移植bootloader,如u-boot,vivi等。 2.裁剪Linux。 3.移植Linux。 4.制作根文件系统。 5.移植文件系统。 6.开发LC...
阅读全文
1:如果函数的参数是一个指针,不要指望用该指针去申请动态内存。Test 函数的语句 GetMemory(str, 200)并没有使 str 获得期望的内存,str 依旧是 NULL,为什么? void GetMemory(char *p, int num)  {       p = (char *)malloc(sizeof(char) * num);  }  void Test(void)  {       char *str = NULL;       GetMemory...
阅读全文
2018-11-16 16:41 工业·编程 ⁄ 共 517字 暂无评论
1,初始化链表头部指针需要用二级指针或者一级指针的引用。 2,销毁链表需要用到二级指针或者一级指针的引用。 3,插入、删除、遍历、清空结点用一级指针即可。 分析: 1,只要是修改头指针则必须传递头指针的地址,否则传递头指针值即可(即头指针本身)。这与普通变量类似,当需要修改普通变量的值,需传递其地址,否则传递普通变量的值即可(即这个变量的拷贝)。使用二级指针,很方便就修改了传入的结点一级指针的值。 如果...
阅读全文
void AddToTail(ListNode **head,int value){     ListNode *newNode = new ListNode();     newNode->data=value;     newNode->next=NULL;     if(*head==NULL)         *head=newNode;     else{         ListNode *tempNode = *head;     &...
阅读全文