- 博客(42)
- 收藏
- 关注
转载 (多核DSP快速入门)利用SharedRegion的核间内存共享
本来这一节是讲多核图像灰度转换的例程,不过内容太多,就拆开成两节,多核DSP的内容主要在单核的基础上增加了核间内存共享及核间通信,上一节介绍了一个利用Notify通知机制的简单核间通信方法,这一节我们将介绍利用SharedRegion模块进行核间内存共享的方法。而下一节将是通过MessageQ模块来进行复杂的消息传递方法。 本节仍然以一个简单的例子来结合上节的Notify模块来
2017-07-11 14:45:51 1752 1
转载 应用调试之使用gdb和gdbserver
一、调试原理这里的gdb调试是在pc机上对在开发板上运行的程序进行调试。具体来说的话,在pc机上要运行gdb,在开发板上运行dbserver。gdb调试的时候,pc机上的gdb向开发板上的gdbserver发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作!由此我们知道,pc机上要运行gdb,开发板上要运行gdbserver!
2017-07-04 08:26:53 646
转载 linux socket学习(二)
四.使用selectselect这个系统调用,是一种多路复用IO方案,可以同时对多个文件描述符进行监控,从而知道哪些文件描述符可读,可写或者出错,不过select方法是阻塞的,可以设定超时时间。 select使用的步骤如下:1.创建一个fd_set变量(fd_set实为包含了一个整数数组的结构体),用来存放所有的待检查的文件描述符2.清空fd_set变量,并将需要检查的所有文件描述
2017-06-15 11:56:40 404
转载 linux socket学习(一)
大纲一.Socket简介二.BSD Socket编程准备1.地址2.端口3.网络字节序4.半相关与全相关5.网络编程模型三.socket接口编程示例四.使用select五.使用kqueue六.使用流 一.Socket简介 在UNIX系统中,万物皆文件(Everything is a file)。所有的IO操作都可以看作对文件的IO操作,都
2017-06-15 11:45:32 348
转载 linux下recv 、send阻塞、非阻塞区别和用法
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明: 基本概念: 阻塞IO:: socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会
2017-06-15 11:44:26 436
转载 【Linux多线程】同步与互斥的区别
同步与互斥这两个概念经常被混淆,所以在这里说一下它们的区别。一、同步与互斥的区别1. 同步同步,又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行。例如,线程 T2 中的语句 y 要使用线程 T1 中的语句 x 的运行结果,所以只有当语句 x 执行完成之后语句 y 才可以执行。我们可以使用信号量进行同步:semaph
2017-06-01 21:06:37 312
转载 Linux USB 鼠标驱动程序详解
USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。 USB 设备驱动程序(usb device driver)和 USB 驱动程
2017-05-31 21:53:26 426
转载 使用 Linux 的 strace 命令跟踪/调试程序的常用选项
在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用。当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行。这个简单而又强大的工具几乎在所有的Linux操作系统上可用,并且可被用来调试大量的程序。命令用法让我们看看strace命令如何追踪一个程序的执行情况。最简单的形式,strace后面可
2017-05-25 21:15:15 478
转载 Linux串口(serial、uart)驱动程序设计
一、核心数据结构串口驱动有3个核心数据结构,它们都定义在1、uart_driveruart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)。struct uart_driver { struct module *owner;
2017-05-23 20:15:30 390
转载 Linux面试题汇总答案
一.填空题:1. 在Linux系统中,以 文件 方式访问设备 。2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。3. Linux文件系统中每个文件用 i节点 来标识。4. 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i节点表块 和数据存储块。5. 链接分为: 硬链接 和 符号链接 。6. 超级块包含了i节点表 和 空闲块表 等重要
2017-05-23 15:05:30 568
转载 tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04
首先得要有制作好的uboot和Linux内核镜像zImage,先烧录到sd卡里,这个是已经做好了的工作。 一,ubuntu上先设置好nfs服务1.新建一个要挂载的文件liudijiang@ubuntu:~/share$ pwd/home/liudijiang/share我已经建好了,这是我的路径2.安装nfs服务liudijiang@
2017-05-12 16:07:52 633
转载 busybox的init详解
5.5.3 busybox的init 除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busybox的init也是完成系统的初始化工作,关机前的工作等等,我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox的init进程会依次进行以下工作:(
2017-04-27 16:23:07 537
转载 SD 分区作为跟文件系统 启动Linux
使用SD卡作为根文件系统启动分区1、格式化SD卡,保证一个fat分区,可以使用windows系统copy东西,一个Linux分区,在第一个分区前保证有些空闲的扇区来烧写bootload和kernel 当然也可以按照自己的意愿分配,我的分区如下: Device Boot Start End Blocks Id System
2017-04-27 14:43:30 313
转载 原子操作、信号量、阻塞
一、原子操作 加入原子操作的目的就是多个应用程序同时调用驱动程序, 原子操作的特性是在自增、自减等操作过程中不会被打断,防止两个应用程序同时调用驱动程序情况的发生,其使用过程如下:static atomic_t canopen = ATOMIC_INIT(1); //定义原子变量并初始化为1然后在XXX_open( )函数中这样初始化。static int six
2017-04-17 16:53:11 369
原创 POLL机制的理解
1、poll存在于内核空间,对应于用户空间的select。 有很多用系统调用(用户空间)对应到驱动(内核空间)的函数:系统调用(用户空间) 驱动(内核空间)OpenOpenClose ReleaseReadReadWriteWri
2017-04-05 21:11:15 1960
转载 s3c2410_gpio_cfgpin等内核导出函数
1.S3C2410_GPB5是端口编号,定义在regs-gpio.h中,#define S3C2410_GPIO_BANKB (32*1)#define S3C2410_GPIONO(bank,offset) ((bank) + (offset))#define S3C2410_GPB5 S3C2410_GPIONO(S3C2410_GPIO_BANKB,
2017-03-31 20:16:09 1639
转载 做S3C2410的驱动比较重要的几个文件
转自——hantown原创做S3C2410的驱动,下面几个文件是必须去认真关注的:include/asm-arm/arch-s3c2410/irqs.h定义了中断相关的各种宏include/asm-arm/arch-s3c2410/regs-gpio.h定义了各种GPIOarch/arch/arm/plat-s3c24xx/gpio.c 定义了各种GPIO操作函数a
2017-03-31 20:08:54 660
转载 Linux 设备驱动--- 内核等待队列 --- wait_queue_head --- wait_event_interruptible --- 按键驱动程序优化
目录(?)[-]等待队列等待队列的 定义 和 初始化 wait_queue_head_t DECLARE_WAIT_QUEUE_HEAD 1定义等待队列 2初始化等待队列 3定义并初始化等待队列等待队列的 睡眠 wait_event_interruptible 有条件睡眠无条件睡眠等待队列中唤醒进程
2017-03-30 20:52:30 392
转载 8.1 usb_register 与 usb_regieter_dev
1、usb设备与驱动程序的匹配过程 a.先安装驱动,后插入设备 这种情况下,usb host controller完成对设备的枚举过程后,将设备的信息封装到一个usb_interface结构体中。usb core根据该结构体提供的设备信息(Vendor_id & Product_id)去遍历所有的驱动程序,找到支持该设备的驱动,并调用该驱动中的probe函数。最终将该
2016-12-29 21:12:31 762
转载 字符设备驱动理解
设备驱动的含义 C库中通过open/read/write/seek等来操作文件,所谓字符设备驱动,简单来说就是实现这几个函数的具体内容,linux能把设备抽象为文件,用户调用open/read/write/seek对抽象的文件进行操作就可以操作实际硬件设备(或抽象的设备)。所以字符设备驱动的重点,在于编写内核空间的open/read/write/seek等函数。 可见,
2016-12-25 15:15:27 349
原创 7、某项目RCS内容解析
[root@(none)init.d]#cat rcS#后面一般为注释的内容#!/bin/sh此句含义:#! /bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径。如果脚本中没有声明,则脚本将在用户默认的shell中执行。用户默认的shell环境是在/etc/passwd中定义:比如pass
2016-12-25 15:12:35 586
转载 1、华为C++笔试
1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范
2016-12-25 15:08:49 1203
原创 4、布局方法
1、在.h中进行水平和垂直方向布局定义QHBoxLayout *Dlg_pHLayout; //水平方向布局QVBoxLayout* Dlg_pVLayout; //垂直方向布局2、在.c中实例化布局管理器Dlg_pHLayout = new QHBoxLayout;Dlg_pVLayout = new QVBoxLayout
2016-12-25 15:06:40 253
原创 3、容器的使用
1、QvectorQVector DlgButtons; //.h文件中创1个数组容器DlgButtons.resize(7); //.c文件中设置容器(数组大小) for(int i=0;i DlgButtons[i]= new QPushButton(DlgButtonsName[i],this); //标
2016-12-25 15:05:15 259
原创 2、QT中创建一个Button
QPushButton *button1 = new QPushButton("Bord Test",this); //创建一个名字为Bord Test的按钮button1->move(100,10); //按钮显示在主窗口的100,10坐标处QVectorQPushButton *> buttons; //定义butt
2016-12-25 15:04:01 623
原创 1、QT 语法查漏(随时更新)
1、解决中文乱码问题:QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));2、 a.cpp中添加了一个A类的私有槽函数:void open_dialog(); b.cpp中添加了一个B类的成员函数 CreatDialog() 使用open_dialog调用 CreatD
2016-12-25 15:02:42 371
原创 1.1问题及警告解决办法(随时更新)
1、在编译u-boot时,出现了这样的警告warning: function declaration isn’t a prototype [-Wstrict-prototypes]解决办法:函数没有参数,给函数参数位置加上void2、NFS mount failed, reason given by server: Permission denied解决步骤:
2016-12-25 14:57:15 438
转载 开发板挂载NFS
1.虚拟机安装配置NFS1)#sudo apt-get install nfs-kernel-server nfs-common portmap #sudo dpkg-reconfigure portmap 选择否安装方式很多,一般不会有问题,注意不要将portmap绑定在loopback地址上。安装完以后查看cat /etc/default/portmaps,确
2016-12-25 14:53:16 437
原创 6、输入子系统驱动编写
static struct input_dev *buttons_dev; //定义一个指针buttons_dev,指向input_devstatic int buttons_init(){ /*1、分配一个input_dev结构体*/buttons_dev = input_allocate_device(); /*2、设置*
2016-12-25 14:51:46 309
原创 5.1 改进字符设备驱动LEDS
1、实现自动创建主设备号,和自动创建设备节点(不再手工操作 mknod /dev/zxl c 100 0 ) c代表字符设备,主设备号100,次设备号0,设备名xxxstatic struct class *firstdev_class;static struct class_device*first_class_devs;int major;
2016-12-25 14:49:15 222
原创 5、字符设备驱动LEDS
static int first_drv_open(struct inode *inode, struct file *file){ printk("first_drv_open\n"); return 0;}static int first_drv_read(struct file *filp, char __user
2016-12-25 14:38:41 219
原创 4、网络根文件系统(NFS)
一、准备工作:1、ifonfig 查看ip,如果没有信息输出,则ifconfig eth0 up启动网卡,设置开发板的ip和电脑ip在同一个网段,比如我设置的是:ifonfig eth0 171.16.1.111,ping看看电脑,开发板和ubuntu是否互通,ping通才行二、间接启动NFS(从flash启动)1、首先,从FLASH上启动根文件系统,然后再用命令挂机NFS挂接
2016-12-25 14:36:42 409
原创 3、制作映像文件yaffs2
1、解压 yaffs_source_util_larger_small_page_nand.tar.bz22、进入yaffs2的utils目录:cd Development_util_ok/yaffs2/utils,执行make进行编译,生成如下: 3、将mkyaffs2image 拷贝到虚拟机系统的 /usr/local/bin文件夹中,并且增加可执行权限
2016-12-25 14:34:21 343
原创 2.1 完善最小根文件系统
1、mkdir proc mount -t proc none /proc (挂载内核虚拟文件系统 /proc) ---手工挂载2、自动挂载$ gedit etc/inittab 加入: ::sysinit:/etc/init.d/rcS$ mkdir etc/init.d 创建目录init.d$ ge
2016-12-25 14:32:12 316
原创 2、构建根文件系统步骤
1、把busybox压缩包拷贝到哦工作目录,如: my_work2、解压:tar -jxvf busybox.tar.bz23、进入解压的文件夹:gedit Makefile 找到CROSS_COMPILE ?= arm-linux- 是否存在,确定交叉编译工具是否存在,不存在的进行补全4、make menuconfig 进行配置,记得打开table命令补全功能,
2016-12-25 14:29:44 283
原创 1、Linux命令查漏(随时更新)
.tar.gz 格式解压为 tar -zxvf xx.tar.gz.tar.bz2 格式解压为 tar -jxvf xx.tar.bz2mkdir -p abc/bcd/file2 依次创建3个目录$find . -name'file*'$find / -name'vimrc'$fi
2016-12-25 14:28:53 261
转载 Linux内核的Makefile和kconfig解读,如何在内核中添加自己的代码
一、概述 在内核编译中如何将各个目录树中的文件组织起来编译是一个很重要的问题,并且要根据用户配置来编译特有的内核。为了解决这个问题,内核使用两种文 件,Makefie和Kconfig。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关 的内核配置菜单,就是我们使用命令 make menuconfig(或者xconfig)后产生的
2016-11-24 09:18:26 3018
转载 最全面的linux信号量解析
一、信号量的概念:信号量用来保护共享资源,让资源在一个时刻只能被一个进程(或线程)拥有。信号量的值为正,代表空闲状态,测试的线程可以锁定并且使用它。若值为0,代表被占用,测试的线程进入睡眠队列,等待被唤醒。二、信号量的分类:linux提供了两种信号量: 1.内核信号量:由内核控制路径使用。 2.用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYS
2016-11-23 18:11:16 261
转载 韦东山学习笔记
韦东山书读后感1. 对异常概念的理解 异常就是可以打断CPU正常运行的事件,比如,外部中断、未定义的指令、软中断等。当这些异常发生时,就打断CPU的正常运行,跳到相应的异常处理程序去处理这些异常要求的一些操作。2. Linux内核异常处理框架基于Linux-2.6.32,内核启动时early_trap_init(void)将异常向量表拷贝到0xffff000
2016-11-16 20:34:07 1269
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人