随笔分类 -  Linux编程

Linux编程
摘要:现在EMMC盛行,分析总结还是很有必要的。以下以全志a64为实例切入主题。 这里a64有三个sdc0~2,硬件上sdc2是连接EMMC,这里只分析sdc2的代码。 初始化的代码在linux-3.10/drivers/mmc/host/sunxi-mmc.c以下忽略部分冗余代码: 设备树会初始化dei 阅读全文
posted @ 2016-09-02 20:15 Kevin_Hwang 阅读(5066) 评论(0) 推荐(1)
摘要:废话不多说,直接进入主题。在驱动insmod后,我们应用层对input设备如何操作?以下以全志a64为实例。 在/dev/input/eventX下(X的形成为后续会分析),是内核把接口暴露给应用层,一切操作都在这个文件上。 input子系统有两大部分,分别是input_dev和input_hand 阅读全文
posted @ 2016-08-25 01:02 Kevin_Hwang 阅读(783) 评论(0) 推荐(0)
摘要:看了apue3,关于进程线程和进程间通信写了一个例子,方便自己理解相关知识,备忘。 程序开启4进程8线程同时一起累加。线程可以用全局变量同步,但4个子进程间不能共享累加结果,需要用进程共享量。同时涉及到多线程多进程的并发,需要用进程互斥量。 阅读全文
posted @ 2016-08-23 02:58 Kevin_Hwang 阅读(603) 评论(0) 推荐(0)
摘要:在linux用户层上要操作底层串口需要对/dev/ttySxxx操作,这里的ttySx指实际的终端串口。 以下以全志A64为实例,分析UART驱动以及浅谈TTY架构。 linux-3.10/drivers/tty/serial/sunxi-uart.c: 先看看注册tty_driver里面做了什么操 阅读全文
posted @ 2016-08-18 11:47 Kevin_Hwang 阅读(4449) 评论(1) 推荐(0)
摘要:内核里面用list_for_each_entry实在太多了,定义在linux-3.10/include/linux/list.h: 要分析list_entry就得分析container_of,linux-3.10/include/linux/kernel.h: 宏定义的第一行:typeof(x)是g 阅读全文
posted @ 2016-08-03 23:11 Kevin_Hwang 阅读(2684) 评论(0) 推荐(0)
摘要:pinctrl框架是linux系统为统一各SOC厂家pin管理,目的是为了减少SOC厂家系统移植工作量。 通常通过设备树初始化pinctrl,并提供调用io接口,以下为全志A64平台的实例: 在drivers/pinctrl/sunxi/pinctrl-sun50iw1p1.c: start_ker 阅读全文
posted @ 2016-07-27 17:53 Kevin_Hwang 阅读(9078) 评论(0) 推荐(0)
摘要:vmem是内存多字符设备。包含vfs的open、read、write、ioctl、poll、fasync和release函数,device文件的读写。 virtual_mem.c 测试程序virtual_test.c: Makefile: github代码地址 https://github.com/ 阅读全文
posted @ 2016-07-22 02:30 Kevin_Hwang 阅读(679) 评论(0) 推荐(0)
摘要:在内核里,如何利用dtb?以下以全志a64为实例讲解。 解析dtb的流程如下: start_kernel // init/main.c setup_arch // arch/arm64/kernel/setup.c setup_machine_fdt(__fdt_pointer) unflatten 阅读全文
posted @ 2016-07-22 01:23 Kevin_Hwang 阅读(2977) 评论(0) 推荐(1)
摘要:如何单独编译设备树? cd linux-x.xx & make dtbs 生成的dtb在目录linux-x.xx/arch/xxx/boot/dts下 反编译dtb,生成dts: linux-x.xx/scripts/dtc/dtc -I dtb -O dts xxxx.dtb -o xxxx.dt 阅读全文
posted @ 2016-07-13 15:00 Kevin_Hwang 阅读(11045) 评论(0) 推荐(0)
摘要:在驱动编程里面经常会用到ioctl的系统调用,发现cmd = 2的时候,用户ioctl直接返回-1。 原因在于在linux-x.xx/fs/ioctl.c定义的do_vfs_ioctl函数 发现do_vfs_ioctl实现先判断系统的cmd不匹配后才判断用户的cmd。 从以下代码可以得出 FIGET 阅读全文
posted @ 2016-07-13 00:52 Kevin_Hwang 阅读(7047) 评论(0) 推荐(0)
摘要:在linux-x.xx/include/uapi/asm-generic/errno-base.h和errno.h里分别定义了返回错误的信息。 errno-base.h: errno.h: 以上可知错误信息在1~133之间,返回错误会添加-号,故返回-133~-1。 部分函数内部有记录错误的信息并且 阅读全文
posted @ 2016-07-07 14:15 Kevin_Hwang 阅读(287) 评论(0) 推荐(0)
摘要:安装ssh服务:sudo apt-get install openssh-server 安装vim:sudo apt-get install vim-gtk 安装gparted:sudo apt-get install gparted 安装tree:sudo apt-get install tree 阅读全文
posted @ 2016-07-06 14:10 Kevin_Hwang 阅读(288) 评论(0) 推荐(0)
摘要:在JAVA和CPP这种OOP语言中,都有泛型类,在C语言可以用宏定义实现泛型函数。 main.c Line 3:typeof(x)表示获取x的类型。 Line 5:(void) (&_min1 == &_min2);在编译提示。 若不同类型指针做逻辑比较在编译过程会提示:warning: compa 阅读全文
posted @ 2016-06-14 12:01 Kevin_Hwang 阅读(1161) 评论(0) 推荐(0)
摘要:main.c hello.c 1:gcc -shared -fPIC -o libmyhello.so hello.c 把hello.c生成动态库。 -shared表示共享,用作动态库。 -fPIC position independent code表示位置无关代码,用于动态加载。 2:gcc -o 阅读全文
posted @ 2016-06-13 01:06 Kevin_Hwang 阅读(263) 评论(0) 推荐(0)