![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 55
叶玄青
我是谁
展开
-
垃圾长城宽带,一次惨痛的系统更新经历
看到尘封已久的beaglebone black板子,最近正好有人来讨论arm上运行区块链rust节点的问题,就想手头的BBB板子也闲置挺久了,可以派上用场。接上电源线,打开tera term串口工具,设置好波特率和显示界面。很快,就看到了debian的启动日志。下了一个arm版本的rust-init,试着直接在板子上搭建工具链,提示需要glibc-2.16,没法,系统版本太久,还是debian...原创 2019-11-17 18:17:57 · 1619 阅读 · 0 评论 -
Linux内核移植 part1:全面介绍ARM Linux启动流程
本文介绍arm核cpu裸机启动过程。在cpu reset之后,pc会指向reset vector (地址位于0x00000000 or 0xFFFF0000),此时的代码需要做以下几件事情:在多核系统中,让非主要核睡眠。初始化异常向量初始化memory,包括MMU初始化不同模式下的栈以及寄存器初始化关键I/O设备针对NEON或VFP做些必要的初始化使能中断改变核心模式或者状态如果需原创 2016-11-01 11:40:48 · 8751 阅读 · 0 评论 -
Linux内核移植 part3:sdmmc驱动
一种纯粹靠读书学来的真理,与我们的关系,就像假肢、假牙、蜡鼻子甚或人工植皮。而由独立思考获得的真理就如我们天生的四肢:只有它们才属于我们。 —— 叔本华读书的价值在于认识你自己,而不是用填鸭式的知识来武装自己。今天的主题是sd卡驱动。分为故事描述和总结两部分,第一部分是发现问题到解决问题的过程,第二部分是总结,不想知道过程的可以直接跳到总结。一 故事是这样的自从更新博客以来,有不少童鞋通过qq,邮原创 2017-03-06 15:23:42 · 3270 阅读 · 1 评论 -
Linux内核移植 part3:pinctrl和gpio驱动
世上最快乐的事,莫过于为理想而奋斗。 —— 苏格拉底谨以这句格言送给自己和所有在路上的朋友。exynos 4412平台有很多模块穿插了gpio的控制,譬如usb phy需要gpio来控制提供bus,sdmmc的所有管脚都和gpio复用。这篇文章就介绍一下Linux 4.1版本内核是如何配置gpio的。一 设备树和平台编码的配合设备树负责组织gpio,但是关于每个bank有多少个gpio口,每个口的原创 2017-03-06 00:15:38 · 2669 阅读 · 0 评论 -
Linux内核移植 part4:再论设备树
惟有对自己卓越的才能和独特的价值有着坚定不移之确信的人才能称之为“骄傲”。任何想假装高傲的人不一定就能骄傲,他多半会像其他人一样,很快地丢弃掉这个假装的个性。 —— 叔本华之前在移植uboot和Linux内核的时候已经探讨过一部分device tree的内容了,特别是介绍了uboot中设备树结构在内存中的组织形式。但是一直都没有较为系统的总结一下Linux设备树的内容。希望这篇文章对Linux中的原创 2017-03-04 14:22:09 · 911 阅读 · 0 评论 -
Linux内核移植 part3:eMMC驱动
单个的人是软弱无力的,就像漂流的鲁滨孙一样,只有同别人在一起,他才能完成许多事业。 —— 叔本华内核版本:4.1 硬件平台:迅为exynos 4412开发板移植eMMC驱动很快就结束了,从exynos4412-trats2.dts中拷贝配置,直接就能工作(删除vmmc-supply属性)。mmc@12550000 { num-slots = <1>; broken原创 2017-03-01 10:15:42 · 3608 阅读 · 1 评论 -
Linux内核移植 part3:串口驱动
每日一乐:小美在作文簿里写上长大后的愿望:一、我希望能有一个可爱的孩子;二、我还希望能有一个爱我的丈夫。结果,发现老师写了一句评语:“请注意先后顺序。”介绍Linux kernel 4.1对exynos 4412串口的支持。 其实这部分工作已经过去很久了,因为以后的重心不在这方面了,今天为了帮一个童鞋解决个问题,正好又看到这个,索性就写篇文章记录一下吧,说不定哪天有人因为看到了这篇文章,能够在工原创 2017-02-28 22:23:10 · 2600 阅读 · 0 评论 -
Linux内核移植 part3:usb host驱动
初期教育应是一种娱乐,这样才更容易发现一个人天生的爱好。 —— 柏拉图深深赞同柏拉图的这个观点,人是有天性的,教育无非就是如何引导天性朝有利的方向发展。继续Linux内核移植系列,今天介绍如何移植Exynos4412 usb驱动,采用的平台依旧是itop Exynos4412精英板。协议的知识就不介绍了,直接来移植一个可以使用的usb host驱动。一 硬件配置1.1 外部管脚首先usb host原创 2017-03-06 14:53:17 · 2275 阅读 · 0 评论 -
Linux内核移植 part4:关于initrd和initramfs
一、initrdram disk中的file system叫做initrd,全名叫做initial ramdisk。 注意: 当下用initrams多如何创建initial ramiskhost > dd if=/dev/zero of=/dev/ram0 bs=1k count=<count>host > mke2fs -vm0 /dev/ram0 <count>host > tune2原创 2017-01-06 23:37:56 · 4692 阅读 · 0 评论 -
Linux内核移植 part4:API Reference for V4.1
1 Auxilary Interfaces1.1 double linked liststatic inline void INIT_LIST_HEAD(struct list_head *list);list_for_each_entry(pos, struct list_head *head, member);static inline void list_add_tail(struct l原创 2016-09-23 13:48:11 · 923 阅读 · 0 评论 -
Linux内核移植 part4:内核线程对信号的处理
转自 http://www.51testing.com/html/63/524463-819036.htmlLinux 线程Linux中的线程分为用户线程和内核线程,用户线程是标准的线程,完全的自主性,完全的抢占性;但是内核线程就不那么好了,某种意义上没有用户线程那么清闲,这个怎么理解呢?用户线程的编写者只需要实现应用逻辑就可以,至于调度,信号处理等工作完全有内核代劳,用户进程根本不需要操这些心,比转载 2016-09-20 16:02:12 · 925 阅读 · 0 评论 -
Linux内核移植 part4:bitmap详解
1 含义顾名思义,bitmap就是指位映射,通过给比特位赋予含义来实现特定的功能,主要是用来管理资源。不同的映射,其每一位代表的含义不同。以dma内存映射为例,每一bit就代表一个内存页。从数据结构上看,bitmap是一个数组,其类型为长整形(long bitmap[])。2 在dma预留内存分配机制中的应用。2.1 申请内存在内核刚启动后,通过调用dma_declare_原创 2016-09-05 08:04:39 · 1875 阅读 · 0 评论 -
Linux内核移植 part4:总线设备模型
总线设备模型(一)标签: linux系统1. 引言本文介绍linux内核是如何支持总线设备驱动框架的。因为amba相关的代码结构比较简单,代码目录位于drivers/amba/下,源代码只有两个文件,分别为bus.c和tegra-ahb.c,相关头文件include/linux/amba/bus.h。我们可以通过阅读这部分代码来了解内核的设备模型。主要内容包含以下几个方面: - 注册方式 - 设原创 2016-06-29 14:44:28 · 892 阅读 · 0 评论 -
Linux内核移植 part4:内核timer
kernel timer标签(空格分隔): 定时器 工作队列测试代码用来演示timer和workqueue的工作方式,由timer每隔500ms触发一个event,该event用来在终端打印log。 代码如下Makefile#ifneq ($(KERNELRELEASE),)obj-m := myphone.omyphone-objs := workqueue.o#elseKERNEL原创 2016-04-19 12:29:46 · 1130 阅读 · 0 评论 -
Linux内核移植 part4:USB系统介绍
1. 历史USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。下一代USB接口将会有改动方向,下一代的Type-C USB接口,可支持正反原创 2016-10-21 00:48:36 · 860 阅读 · 0 评论 -
Linux内核移植 part3:Exynos4412内核编译
为了在exynos 4412平台上运行系统,选择了linux来测试,因为只是用来测试的,所以并没有完整功能的移植,只要能启动就可以了。兼顾方便和先进性,选择了4.1这个长期支持版本。从清华的源上下载速度比较快。因为选择的是uboot启动,执行$ make exynos_defconfig$ make uImage 注:如果找不到mkimage工具,在uboot根目录tools目录下有,放到/u原创 2017-01-02 00:24:54 · 2042 阅读 · 0 评论 -
Linux内核移植 part1:arm gcc 编译与链接参数
虽然当前android啥的是主流,但是在进行裸机开发的时候,熟悉编译器这些参数就很重要了。下面以uboot的编译和链接过程为实例介绍arm gcc相关的参数。具体内容可以参考官方文档: https://gcc.gnu.org/onlinedocs/ pdf版本下载:https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc.pdf编译参数arm-none-linux-原创 2017-01-04 21:11:43 · 2876 阅读 · 0 评论 -
beautiful C code(updating)
记录看到过的让人眼前一亮的C代码,通常是简洁高效的一些做法移位操作在designware usb2.0 otg driver中看到u32 daint, daintmask;daint &= daintmask;daint_out = daint >> DAINT_OUTEP_SHIFT;daint_in = daint & ~(daint_out 通常我们的做法是通原创 2017-06-06 23:15:31 · 1109 阅读 · 0 评论 -
usb3.0开发指南:验证过程总结
自由固不是钱所能买到的,但能够为钱而卖掉。 —— 鲁迅usb mass storage设备能顺利读写了,这样的话,对于ip来讲,从链路层到协议层起码是能正常工作的了。关于后面文章的安排:阶段性工作总结的文章就不写了,后面可能针对某些技术点重点罗嗦几句。一、mass storage设备读写支持代码下载,驱动还是参考自uboot,通过msg_write和msg_read接口对设备进行读写,都能正常工作原创 2017-04-17 23:28:44 · 8200 阅读 · 1 评论 -
usb3.0开发指南:bulk传输验证
menu {:toc} 伟大的成绩和辛勤劳动是成正比例的,有一分劳动就有一分收获,日积月累,从少到多,奇迹就可以创造出来。 —— 鲁迅鲁迅先生的这句话真是鼓舞码农的心啊,一分劳动一分收获。昨天困扰了一天的问题,今天起床的时候突然想到,然后一试,竟然通了。一、进度审查解决了无法获取描述符data的问题。添加mass storage设备驱动,编译通过,代码仓库在这里从验证的角度讲,只要通过读原创 2017-04-14 18:55:21 · 2269 阅读 · 0 评论 -
usb3.0开发指南:验证过程调试
其实地上本没有路,走的人多了,也便成了路。 –鲁迅一、工作进展自从前几天dwc3 day3–platform,转眼一个星期了。上周六(8号)在验证环境下实验,发现一直不能检测到port connect信号。这周一(10号)检查了一天没发现什么问题,周二早上终于发现了,原来是phycfg寄存器的suspend位置1了。周三上午set address和get device descriptor的set原创 2017-04-13 22:39:40 · 4314 阅读 · 1 评论 -
usb3.0开发指南:验证软件框架
浪费时间是一桩大罪过。 —— 卢梭这篇文章介绍如何将dwc3验证套件应用到自己的平台上,基本上算是使用手册吧。一、构建usb验证项目把整个dwc3_portable项目拷贝到自己的验证环境中,在自己的Makefile中指定编译目标,比如DWC3_DIR := dwc3_portableDWC3_SRC += $(DWC3_DIR)/usb.c \ $(DWC3_DIR)/host/xhc原创 2017-04-06 23:00:23 · 4260 阅读 · 1 评论 -
usb3.0开发指南:7天完成usb3.0控制器验证
思想像胡须,不成熟就不可能长出来。 —— 伏尔泰胡须能作为身体成熟的标志,那么什么又能体现思想成熟呢?一、写在前面当前SoC的设计很多工作都在于ip的集成,所以为了保证ip的可靠性,需要对ip进行验证。通常ip供应商会提供软硬件验证环境,但是这个情况也是不一定的。那么在没有软件验证环境的时候怎么办?一个比较可行的方法是:参考Linux内核,如果有对应驱动的话,可以拿来做测试。对的,这个主题就是关于原创 2017-04-04 10:49:05 · 5631 阅读 · 3 评论 -
usb3.0开发指南:host环境验证
人生得一知己足矣,斯世当以同怀视之。 —— 鲁迅人生得一知己足以,斯世当以同怀视之。人生本来就很短暂,能得一知己又是多么的幸运。 今天又花了将近一天时间,整理dwc3 usb验证套件,主体部分已经完成的差不多了,代码依旧在我的dwc3仓库中。这篇文章记录今天的工作内容,其实就是主体内容。一、第二天进展第一天完成了初始化流程,然后建了个Makefile工程进行统一管理。第二天完成以下几个部分:u原创 2017-04-05 21:42:40 · 4509 阅读 · 2 评论 -
qemu实验
.\qemu-img.exe -f qcow2 create vmdisk.img 10G .\qemu-system-x86_64.exe -hda .\vmdisk.img -cdrom .\ubuntu-14.04.2-desktop-amd64.iso -m 512M -boot d -net nic -net user原创 2017-05-14 17:50:08 · 1303 阅读 · 0 评论 -
PCIe资料汇总
整理PCIe相关知识及资料原创 2017-05-30 22:30:24 · 10803 阅读 · 1 评论 -
git: push免输用户名和密码
生成ssh key$ ssh-keygen然后把~/.ssh/is_rsa.pub的内容拷贝到github上,再在本地执行$ git remote rm origin$ git remote add origin git@github.com:username/tree.git$ git push --set-upstream origin master即可原创 2016-12-19 09:40:13 · 606 阅读 · 0 评论 -
Linux内核移植 part1:eMMC启动
时间,就象海棉里的水,只要愿挤,总还是有的。 —— 鲁迅从建立博客到现在陆陆续续有好几个童鞋来找我要代码,其中有个问题经常提到:支不支持从emmc启动。但是我移植uboot和kernel只是为了探究我自己感兴趣的东东,所以没有去关注emmc启动的问题。最近工作正好告一段落,就来看看eMMC boot的问题吧。uboot eMMC驱动框架简介检查了uboot的代码,发现在2015.04版本中是通过一原创 2017-03-02 21:40:23 · 10628 阅读 · 0 评论 -
Linux内核移植 part1:uboot 框架及移植
1. 引言本文以最新版uboot(2016.05)为例介绍bootloader框架,uboot代码越来越庞大,除了boot系统之外,充当测试平台都没问题,支持的硬件也很丰富,spiflash, mmc, usb, network, serial, sound.etc, 简直就是小型的操作系统。平台相关名字设置 SoC Vendor Board Config Name apoll原创 2016-05-05 22:24:57 · 3463 阅读 · 0 评论 -
Linux内核移植 part4:USB概念梳理
USB只是一个协议,所谓协议也可以理解为规矩,要知道所有协议都是对现实世界的二次包装。譬如行人过马路,通过设定红绿灯的规矩,把过马路这个过程分成了:红灯等待,绿灯行走。对一个要过马路的人来讲,单纯从过马路所需要的物理时间考虑,遵守红绿灯规则会降低她的过马路效率。但是在人流车流拥挤的地方,假如没有红绿灯,行人可能根本没有机会过马路,至少我在上海的体验是这个样子的。所以协议的设计通常是从一定的范围来考虑原创 2016-10-20 23:53:38 · 744 阅读 · 0 评论 -
Llinux内核移植 part4:USB hub线程
USB系统: hub线程1. hub表征usb子系统中所有和hub相关的都交由一个内核线程表征, 通过 static struct workqueue_struct *hub_wq 来管理。创建/删除hub_wq = alloc_workqueue("usb_hub_wq", WQ_FREEZABLE, 0);destroy_workqueue(hub_wq);queue_work(hu原创 2016-09-26 13:03:55 · 2256 阅读 · 0 评论 -
Linux内核移植 part4: USB总线
总线设备模型(二): USB总线标签: linux系统1. 数据结构所有的USB设备都和一个东东关联,那就是bus,其类型定义在drivers/usb/core/driver.c中struct bus_type usb_bus_type = { .name = "usb", .match = usb_device_match, .uevent = usb_e原创 2016-09-24 15:37:45 · 683 阅读 · 0 评论 -
remote: Permission to repository_name.git denied to xxxx.
在macbook下,push代码到github的时候报错。其中xxxx为以前用过的一个账号,经过搜索解决方法如下打开钥匙串访问搜索git删除和xxxx相关的记录再push就OK了,参考 http://stackoverflow.com/questions/5335197/gits-famous-error-permission-to-git-denied-to-user原创 2016-11-24 13:34:19 · 2672 阅读 · 1 评论 -
Makefile 伪目标.PHONY
在接触Makefile的时候,我们经常会看到.PHONY.PHONY标记,它就是伪目标,所谓伪目标,就是指没有真正的文件和它对应,只是一个标识而已。make程序看到.PHONY.PHONY后面的目标后就会去执行对应的命令。例如有如下代码:build: @echo "Building"all: @echo "hello"clean: @echo "clean"$ make$原创 2016-12-05 20:15:30 · 10263 阅读 · 0 评论 -
Linux开发常用命令总结(持续更新)
编辑器打开二进制文件vi -b file_name:%xxd比较文件$ meld file01 file02or$ vimdiff [-b] file01 file02编译器(以gcc为例)// 反汇编$ objdump [-Sx] elf_file > output_file烧录$ dd if=image_name of=/dev/devi原创 2016-11-17 10:37:46 · 31622 阅读 · 0 评论 -
MAC OSX 多文件编译链接
现在有两个文件:main.c和source.cmain.c作为驱动程序,用来测试源代码;source.c为源代码main.c#include <stdio.h>int c_entry(void);int main(int argc, char *argv[]){ printf("%d\n", c_entry()); return 0;}source.cint c_entry(){原创 2016-11-22 17:09:28 · 45778 阅读 · 0 评论 -
Mac和Windows中常见中文字体的英文名称
我们在给HTML元素设置字体的时候经常会有类似 “ font-family:”微软雅黑”, “黑体” ” 这样的写法,尤其是在使用Dreamweaver、Aptane这些IDE的时候,更是会因为自动代码提示,而一键回车了事。当然,这样的写法在国内应该是很少会遇到问题,但是如果你所工作页面是面向多语言用户的,那么这段中文的font-family就极有可能因为字符编码的问题,产生乱码,浏览器无法解析,转转载 2016-11-15 16:06:46 · 17172 阅读 · 0 评论 -
C语言函数变参使用
用法示例,一个编译器错误处理函数:enum e_ErrorLevel{ LEVEL_WARNING, LEVEL_ERROR,};enum e_WorkStage{ STAGE_COMPILE, STAGE_LINK,};void handle_exception(int stage, int level, char *fmt, va_list ap){原创 2016-11-14 13:35:43 · 10639 阅读 · 0 评论 -
Linux USB Host 驱动开发入门
1. 目录结构下面以当前内核4.3.1为例,介绍usb驱动在内核源码树中的组织方式,不保证各个内核版本都适用,但是基本上每个版本都是一样的。 内核源码中涉及usb驱动的目录:drivers/usb/ 该目录为主要的usb驱动目录,所有和usb硬件相关的代码都在这里,还包括部分类协议代码,有对mass storage设备的支持,串口设备的支持。也就是说内核默认支持u盘这类mass原创 2016-10-21 00:56:36 · 1669 阅读 · 0 评论 -
Beaglebone Black通过usb和Linux Mint共享上网
用usb otg线连接笔记本和beaglebone black开发板, 板子起来后,在网络连接里看到多了一个有线连接。先通过ssh登陆到开发板。 username=debian, password=temppwd$ssh debian@192.168.7.2然后添加路由$route add default gw 192.168.7.1在etc/resov.conf中添加nameserver 192原创 2016-11-09 18:44:15 · 1511 阅读 · 0 评论