摘要:
前言 这篇博文是 "uboot makefile构建分析" 的续篇,继续分析uboot构建u boot.bin的过程 构建u boot.bin过程分析 makefile一开始,就是确定链接脚本。在构建uboot和kernel的过程,链接脚本是非常重要的。它决定了你程序里面每个段的位置(加载位置和运行 阅读全文
摘要:
前言 之前对uboot的构建进行了分析,现在再对linux kernel的构建进行分析。几年前的确也分析过,但是只是停留在笔记层面,没有转为文章,这次下定决定来完善它。 环境 同样,采用的还是zynq平台的linux,从Makefile可以看到版本: linux Makefile支持的选项(最常用到 阅读全文
摘要:
前言 为了方便其他人搭建dm368 ipnc3.0环境,我写了个脚本,执行脚本就可以自动搭建好环境了,绝对的傻瓜操作了,不过有一个地方让我很郁闷,那就是在用sed替换掉某段内容的时候(143行 156行),替换的文本有很多行且里面某些行必须要tab开头(makefile要求,这里看不出,上传的问题) 阅读全文
摘要:
注意:树莓派系列的3篇文章里面的图片因为博客转移过程丢失了,非常抱歉 前言 我对树莓派其实并不了解,只是几年前听说过它的相关信息。最近,也就是16年3月份,又听说树莓派3B即将发售,而且是配备了4个A53的64bit cpu,于是我兴趣来了^_^ 。之所以想写这个系列,有下面几方面原因 网上很少有看 阅读全文
摘要:
注意:树莓派系列的3篇文章里面的图片因为博客转移过程丢失了,非常抱歉 前言 远程访问有很多种方式可以实现。比如ssh、telnet、ftp、samba、远程桌面等等,各有优缺点。本文主要以ssh和远程桌面的方式进行介绍。 ssh访问方式 这种方式是非图形界面的远程访问,是在终端下的远程访问方式。该访 阅读全文
摘要:
注意:树莓派系列的3篇文章里面的图片因为博客转移过程丢失了,非常抱歉 前言 树莓派系列里涉及到需要额外电脑来协助处理的部分(如烧写系统,远程访问等等),统一在运行着Ubuntu15系统的mac air上进行。很多人或许会不适应,不知道相应的操作在Windows下该怎么进行。之所以最终做这个决定,一方 阅读全文
摘要:
前言 之前有专门写过一篇 "nvidia tk1使用记录 基本环境搭建" ,本以为自己有过tk1的经验后,在tx1上搭建和它一样的环境会轻车熟路,结果却是在nvidia tx1上花的时间居然比tk1还多.我自己也总结了下,一方面,因为tk1的时候,自己还没有知其所以然;另一方面,因为tx1硬件配置, 阅读全文
摘要:
前言 项目最开始是在X86+Nvidia(ubuntu+opencv+cuda)平台上实现,达到了期望性能,最近考虑将其移植到嵌入式平台,特别是最近nvidia出了tegra X1,基于和我们使用的gtx960相同的架构的gpu且是64位 8核心cpu,于是开始了尝试移植过程。当前TX1才出来,购买 阅读全文
摘要:
前言 几年前分析过uboot的构建及启动过程,做了笔记,但最终没有转为文章。这次又有机会开发嵌入式产品了(之前一年多都是在搞x86 linux),看了下uboot的构建过程,觉得有必要写下整个分析过程,为了自己也为了分享,因此就有了这篇文章。 目标 通过分析uboot的整个构建过程,了解我们要开发的 阅读全文
摘要:
前言 主要是想对Linux mmc子系统(包含mmc sd sdio)驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动、块设备驱动、设备模型等也不进行详细说明原理,涉及到sd/mmc/sdio协议部分也只会简单带过,因为linux内核mmc子系统里面已经实现了 阅读全文
摘要:
前言 主要是想对Linux 串口、usb转串口驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如字符设备驱动、平台驱动等也不进行详细说明原理。如果有任何错误地方,请指出,谢谢! 声明:图和个别段落(我做了小的修改)是直接从网上截取 整体概述 linux下的串口或者usb 阅读全文
摘要:
前言 本文纯粹的纸上谈兵,我并未在实际开发过程中遇到需要编写或调试这类驱动的时候,本文仅仅是根据源码分析后的记录!基于内核版本:2.6.35.6 。主要是想对spi接口的wifi驱动框架有一个整体的把控,因此会忽略一些硬件上操作的系统,同时里面涉及到的一些驱动基础,比如数据结构、设备模式也不进行详细 阅读全文
摘要:
前言 项目中需要通过驱动与fpga通讯,获取fpga往内存里写的数据。因为数据量比较大,需要驱动分配600多M的内存给fpga来写数据,且因为是与fpga通讯,需要连续的内存,还得是uncached的,因此打算采用dma接口 来分配如此大的内存。然而,在分配的过程中遇到了一些问题,下面对这次的调试进 阅读全文
摘要:
前言 内核调试是做底层开发必须会的手段。有n多中调试方式,不过呢,我最终还是觉得直接printk打印是最省事的,不依赖安装其他工具,不受限与中断上下文、进程上下文、持锁、smp等(当然,在某些情景下不会省时)。下面就总结下printk的一些技巧,毕竟也没那么简单^_^ printk使用 printk 阅读全文
摘要:
前言 函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0。它内部的实现当然不仅仅拷贝数据,还需要考虑到传入的用户空间地址是否有效,比如地址是不是超出用户空间范围啊,地址是不是没有对应的物理页面啊,否则内核就会oops的。不同的架构,该函数的实现不一样。下面主要以arm和 阅读全文
摘要:
参考文件include/linux/init.h 仅仅在未定义宏MODULE的时候才是上面那样定义的,也就是说,如果编译成模块,那么以上定义全部会自动定义为 。`__define_initcall`的最终展开: 也就是说该宏定义了一个 类型的变量,变量名由输入参数fn(函数名)及输入参数id(通过i 阅读全文
摘要:
前言 devm是内核提供的基础机制,用于方便驱动开发者所分配资源的自动回收。参考内核文档devres.txt。总的来说,就是驱动开发者只需要调用这类接口分配期望的资源,不用关心释放问题。这些资源的释放会在device对象销毁时自动释放。 devres使用 不同的内核模块提供了对应的devm_xxx接 阅读全文
摘要:
前言 编写驱动的时候,经常会用到中断,这时候我们在驱动初始化时就得申请中断,那么问题来了,中断号是多少呢?以前的中断号在板级相关的头文件里面已经静态定义好了,bsp的代码在内核启动过程也会根据那个帮我们建立好hw irq到irq的映射,我们直接用它静态定义的irq就可以了。但是在硬件越来越复杂的今天 阅读全文
摘要:
情景分析 打算从两个角度来情景分析,先从bsp驱动工程师的角度,然后是驱动工程师的角度,下面以三星s3c6410 Pinctrl samsung.c为例看看pinctrl输入参数的初始化过程(最开始的zynq平台的pin配置貌似是通过bitstreams来的,内核层没看到有关配置pin的代码,不过最 阅读全文
摘要:
sensor的驱动 先用 创建info对应的 对象(代表着一个i2c client),并进行驱动匹配。匹配就会触发i2c sensor驱动的probe调用。现在进入到目录 ,我们还是看OV2640驱动吧,毕竟前面的板级文件里只有在定义了 宏才会编译进去。 直接看 。这是一个i2c sensor驱动该 阅读全文