Linux内核移植
文章平均质量分 66
介绍uboot移植,启动Linux内核,移植内核驱动
叶玄青
我是谁
展开
-
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 · 2880 阅读 · 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 · 8756 阅读 · 0 评论 -
Linux内核移植 part1:Exynos4412时钟模块以及UART时钟配置
一 exynos 4412 时钟模块介绍各个模块的时钟如下图所示关于各个模块的介绍见下表 1.1 顶层时钟由clocks from clock pads XRTCXTI, XXTI, and XUSBXTIclocks from CMUs ARMCLK, ACLK, HCLK, and SCLKclocks from USB phyclocks from HDMI_PHYclocks原创 2016-11-18 23:12:38 · 4899 阅读 · 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 · 3468 阅读 · 0 评论 -
Linux内核移植 part1:Exynos4412 sd卡启动uboot
Exynos4412 uboot烧写本文介绍裸机环境下如何编译烧写exynos 4412开发板的uboot1. uboot源代码下载讯为提供的源码压缩包,文件名为iTop4412_uboot_scp_20141224.tar.gz,解压后得到iTop4412_uboot_scp文件夹即可。2. CodeSign4SecureBoot下载samsung官方提供的CodeSign4SecureBoot压原创 2016-11-08 17:48:29 · 13574 阅读 · 0 评论 -
Linux内核移植 part1:Exynos 4412 uboot 调试
最近给Exynos 4412开发板移植了uboot,具体过程就不表了,可以参考: http://blog.csdn.net/abcamus/article/details/51326881代码都已经上传到github: https://github.com/abcamus/bootloader-for-Exynos-4412.git几个注意点:1. arch/arm/include/asm/arch原创 2016-12-08 21:12:11 · 4763 阅读 · 0 评论 -
Linux内核移植 part1:eMMC启动
时间,就象海棉里的水,只要愿挤,总还是有的。 —— 鲁迅从建立博客到现在陆陆续续有好几个童鞋来找我要代码,其中有个问题经常提到:支不支持从emmc启动。但是我移植uboot和kernel只是为了探究我自己感兴趣的东东,所以没有去关注emmc启动的问题。最近工作正好告一段落,就来看看eMMC boot的问题吧。uboot eMMC驱动框架简介检查了uboot的代码,发现在2015.04版本中是通过一原创 2017-03-02 21:40:23 · 10663 阅读 · 0 评论 -
Linux内核移植 part2:printascii详解
uboot下的printascii函数可以用来在串口打印信息,实现代码调试。这个函数实际上就是通过配置硬件相关的参数,通过uart完成打印。代码位于arch/arm/lib/debug.S#if !defined(CONFIG_DEBUG_SEMIHOSTING)#include CONFIG_DEBUG_LL_INCLUDE //debug/8250.S#endif原创 2016-12-13 10:43:59 · 1433 阅读 · 0 评论 -
Linux内核移植 part2:uboot 设备驱动模型
最近在移植uboot-2015.04的时候发现,uboot的设备驱动也带驱动模型了,第一次见到的时候还真是愣了一下,特别是调试的时候没有以前那么方便直接了。而且设备模型和设备树捆绑在一起,又得花费一番功夫来了解了。不禁深深的感慨,搞技术的真真切切就是活到老学到老,而且这种一直学习的状态其实是外界不断强加给你的,有时候真的觉得挺累。人家改改模型,你就得重新去学习适应。其实这种学习都是高投入低产出的,原创 2016-12-23 14:10:20 · 1531 阅读 · 2 评论 -
Linux内核移植 part2:uboot bootdelay参数
uboot启动时会进入倒计时,如果倒计时时间内没有受到按键信息,那么自动执行启动命令。这个等待时间(启动延迟)称作:bootdelay。以环境变量的形式存在于uboot,通过配置CONFIG_BOOTDELAY可以设置这个变量。在移植exynos4412 uboot的时候,找了好一会儿才发现这个默认配置的地方。先是直接从landrover.h往回看,没找到。grep出来后一个个看头文件,第一次尽然看原创 2016-12-23 17:59:46 · 3176 阅读 · 0 评论 -
Linux内核移植 part2:uboot load_addr 释疑
uboot bootm在寻找OS镜像的时候会根据load_addr变量去对应的ram地址中找。/* common/image.c */ulong genimg_get_kernel_addr_fit(char * const img_addr, const char **fit_uname_config, const char *原创 2016-12-26 12:58:58 · 4669 阅读 · 0 评论 -
Linux内核移植 part2:uboot 设备树--基本概念和源码介绍
arm uboot的设备树源文件位于arch/arm/dts/目录下,网络上有很多介绍Linux设备树概念的文章,这里以dts相关的API为切入点,如果都懂了,设备树的东西就迎刃而解了。一. dts相关源代码位于$(tree)/lib/以及$(tree)/lib/libfdt/。完成Flattened Device Tree Decode的功能。libfdt介绍: The原创 2016-12-26 23:35:12 · 4594 阅读 · 0 评论 -
Linux内核移植 part2:uboot设备树--解析过程分析
重点还是这张图,来自 http://blog.csdn.net/abcamus/article/details/53890694整体看下来解析过程的代码比较杂糅。就不按照函数执行流行来了,先对几个功能点进行说明。基本字符串操作:const char *q;while (*p == '/') p++;if (! *p) return offset;q = st原创 2016-12-28 15:52:18 · 4498 阅读 · 0 评论 -
Linux内核移植 part2:uboot lcd驱动
人们手里的金钱是保持自由的一种工具。 —— 卢梭对于卢梭的这句话,不能同意更多啊。这次驱动一块显示屏,历时两天时间,也许是感到倦了,这篇移植文档就当终结吧。关于Linux下的framebuffer驱动就不移植了,在已有的框架下,把配置好的参数添加进去即可。一 硬件介绍显示屏为tsc2007,带电阻式触摸。平台依旧是Exynos4412。废话不多说,直接来看怎么驱动吧。二 设备树配置我的设备树文件是原创 2017-03-10 23:35:18 · 3351 阅读 · 0 评论 -
Linux内核移植 part2:uboot设备树--生成过程分析
本文从设备树软件控制相关代码进行分析,进而理清设备树相关的知识。先放一个设备树在内存中的结构图:分析来源为$(tree)/lib/fdtdec_test.c一、数据结构文件头每个dtb都包含如下结构的文件头,用来表示设备树的基础信息。struct fdt_header { fdt32_t magic; /* magic word FDT_MAGIC */ fdt3原创 2016-12-27 16:09:23 · 3550 阅读 · 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 · 2048 阅读 · 0 评论 -
Linux内核移植 part3:Exynos4412 Linux Kernel移植
本文介绍如何给Exynos 4412 SoC移植Linux内核,所有过程亲自实践,真实有效。 代码类型 版本说明 内核 Linux Kernel 4.1.36 硬件 iTop4412 SCP 精英板 uboot 2015.04 busybox 1.26.1第一部分:代码的使用过程介绍1.1 使用uboot参考http://blog.csdn.net/abcam原创 2017-01-08 16:58:32 · 6415 阅读 · 2 评论 -
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 · 2680 阅读 · 0 评论 -
Linux内核移植 part3:usb host驱动
初期教育应是一种娱乐,这样才更容易发现一个人天生的爱好。 —— 柏拉图深深赞同柏拉图的这个观点,人是有天性的,教育无非就是如何引导天性朝有利的方向发展。继续Linux内核移植系列,今天介绍如何移植Exynos4412 usb驱动,采用的平台依旧是itop Exynos4412精英板。协议的知识就不介绍了,直接来移植一个可以使用的usb host驱动。一 硬件配置1.1 外部管脚首先usb host原创 2017-03-06 14:53:17 · 2283 阅读 · 0 评论 -
Linux内核移植 part3:串口驱动
每日一乐:小美在作文簿里写上长大后的愿望:一、我希望能有一个可爱的孩子;二、我还希望能有一个爱我的丈夫。结果,发现老师写了一句评语:“请注意先后顺序。”介绍Linux kernel 4.1对exynos 4412串口的支持。 其实这部分工作已经过去很久了,因为以后的重心不在这方面了,今天为了帮一个童鞋解决个问题,正好又看到这个,索性就写篇文章记录一下吧,说不定哪天有人因为看到了这篇文章,能够在工原创 2017-02-28 22:23:10 · 2606 阅读 · 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 · 3614 阅读 · 1 评论 -
Linux内核移植 part3:sdmmc驱动
一种纯粹靠读书学来的真理,与我们的关系,就像假肢、假牙、蜡鼻子甚或人工植皮。而由独立思考获得的真理就如我们天生的四肢:只有它们才属于我们。 —— 叔本华读书的价值在于认识你自己,而不是用填鸭式的知识来武装自己。今天的主题是sd卡驱动。分为故事描述和总结两部分,第一部分是发现问题到解决问题的过程,第二部分是总结,不想知道过程的可以直接跳到总结。一 故事是这样的自从更新博客以来,有不少童鞋通过qq,邮原创 2017-03-06 15:23:42 · 3284 阅读 · 1 评论 -
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 · 927 阅读 · 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 · 898 阅读 · 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 · 687 阅读 · 0 评论 -
Linux内核移植 part4:USB概念梳理
USB只是一个协议,所谓协议也可以理解为规矩,要知道所有协议都是对现实世界的二次包装。譬如行人过马路,通过设定红绿灯的规矩,把过马路这个过程分成了:红灯等待,绿灯行走。对一个要过马路的人来讲,单纯从过马路所需要的物理时间考虑,遵守红绿灯规则会降低她的过马路效率。但是在人流车流拥挤的地方,假如没有红绿灯,行人可能根本没有机会过马路,至少我在上海的体验是这个样子的。所以协议的设计通常是从一定的范围来考虑原创 2016-10-20 23:53:38 · 746 阅读 · 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 · 866 阅读 · 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 · 2262 阅读 · 0 评论 -
Linux内核移植 part4:bitmap详解
1 含义顾名思义,bitmap就是指位映射,通过给比特位赋予含义来实现特定的功能,主要是用来管理资源。不同的映射,其每一位代表的含义不同。以dma内存映射为例,每一bit就代表一个内存页。从数据结构上看,bitmap是一个数组,其类型为长整形(long bitmap[])。2 在dma预留内存分配机制中的应用。2.1 申请内存在内核刚启动后,通过调用dma_declare_原创 2016-09-05 08:04:39 · 1877 阅读 · 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 · 1132 阅读 · 0 评论 -
Linux内核移植 part4:内核线程对信号的处理
转自 http://www.51testing.com/html/63/524463-819036.htmlLinux 线程Linux中的线程分为用户线程和内核线程,用户线程是标准的线程,完全的自主性,完全的抢占性;但是内核线程就不那么好了,某种意义上没有用户线程那么清闲,这个怎么理解呢?用户线程的编写者只需要实现应用逻辑就可以,至于调度,信号处理等工作完全有内核代劳,用户进程根本不需要操这些心,比转载 2016-09-20 16:02:12 · 927 阅读 · 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 · 4699 阅读 · 0 评论 -
Linux内核移植 part4:再论设备树
惟有对自己卓越的才能和独特的价值有着坚定不移之确信的人才能称之为“骄傲”。任何想假装高傲的人不一定就能骄傲,他多半会像其他人一样,很快地丢弃掉这个假装的个性。 —— 叔本华之前在移植uboot和Linux内核的时候已经探讨过一部分device tree的内容了,特别是介绍了uboot中设备树结构在内存中的组织形式。但是一直都没有较为系统的总结一下Linux设备树的内容。希望这篇文章对Linux中的原创 2017-03-04 14:22:09 · 917 阅读 · 0 评论