<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[做一个有技术追求的人]]></title><description><![CDATA[但求好事 莫问前程！]]></description><link>https://blog.youkuaiyun.com/skyflying2012</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; skyflying2012]]></copyright><item><title><![CDATA[心理调整]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/53414945</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/53414945</guid><author>skyflying2012</author><pubDate>Wed, 30 Nov 2016 22:40:39 +0800</pubDate><description><![CDATA[在新公司工作近2个月，还没适应节奏和大公司的沉重流程。占空，有时间写下]]></description><category></category></item><item><title><![CDATA[新的开始，全力以赴！]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/52452159</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/52452159</guid><author>skyflying2012</author><pubDate>Fri, 07 Oct 2016 16:36:47 +0800</pubDate><description><![CDATA[就这样，工作4年多来第一次有了一个大半个月的假期，工作日早晨看着上班族匆匆忙忙的身影，深切感受到了李涉“偷得浮生半日闲”的惬意，钓钓鱼，看看景，美好的时光总是过的很快。]]></description><category></category></item><item><title><![CDATA[arm-linux内存管理学习笔记（3）-页表前戏]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/52015124</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/52015124</guid><author>skyflying2012</author><pubDate>Sun, 24 Jul 2016 17:35:38 +0800</pubDate><description><![CDATA[我们在arm-linux内核中看到各种相关宏定义都表示，linux看到的arm一级页目录项有2048个，每个页目录项8bytes，二级页表项是512个。不过arm-mmu的硬件机制却是4096个一级页目录项，每个页表有256个页表项。
两种软硬件机制是靠把2个相邻页目录项的页表存储空间连续分配实现平滑过渡的。]]></description><category></category></item><item><title><![CDATA[Cortex-A8处理器memcpy的优化方案]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/51492975</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/51492975</guid><author>skyflying2012</author><pubDate>Tue, 24 May 2016 19:51:04 +0800</pubDate><description><![CDATA[uncached区域到uncached区域memcpy提升3倍，uncached区域到cached区域提升3.5倍，cached区域到uncached区域提升13.2倍，连我自己都吓到了！]]></description><category></category></item><item><title><![CDATA[Thank You，Kobe]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/51155525</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/51155525</guid><author>skyflying2012</author><pubDate>Thu, 14 Apr 2016 22:03:25 +0800</pubDate><description><![CDATA[大学3年遇到了08到10的两连冠湖科，荣幸！ 
6年已去。 
老科退役，老鱼指教， 
奥多姆死里逃生，拜纳姆不知去向， 
加嫂公牛，扎扎火箭， 
巴恩斯快船，阿泰留守。 
你们还好吗？ 
曾经一起荣耀，如今散落联盟各自飞。 
thank you，kobe 
谢谢湖科，愿老科在商界延续传奇。 
thank you，brother 
更感谢一起看球的大学兄弟！！ 
曾经一起疯狂到天亮，如今为梦想四方天涯]]></description><category></category></item><item><title><![CDATA[arm-linux内存管理学习笔记（2）-内核临时页表的建立]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/51077579</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/51077579</guid><author>skyflying2012</author><pubDate>Wed, 06 Apr 2016 19:24:56 +0800</pubDate><description><![CDATA[需要搞明白的是，linux系统上执行./a.out运行，其实并不是运行的a.out这个elf文件。内核对于要运行的elf文件会调用load_elf_binary进行解析，首先是根据elf文件的header信息获取它需要的解释器，然后加载需要运行的各个段到内存中，把控制权交给解释器，解释器会加载该程序需要动态链接库（静态链接就不运行解释器），最后解释器将控制权交给内存中的程序入口，程序运行。]]></description><category></category></item><item><title><![CDATA[arm-linux内存管理学习笔记（1）-内存页表的硬件原理]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/51044705</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/51044705</guid><author>skyflying2012</author><pubDate>Tue, 05 Apr 2016 16:40:52 +0800</pubDate><description><![CDATA[学习内核的内存管理如果脱离了MMU的硬件原理，只去学习其软件逻辑，真的很难懂。说到底，软件代码的逻辑是为硬件服务，只是为了充分发挥硬件的各项功能，因此学习linux的内存管理机制，首先要学习下该处理器架构下MMU的工作原理，这样对我们理解页表机制的逻辑很有帮助]]></description><category></category></item><item><title><![CDATA[处理器一条指令需要几个时钟周期？]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/51018640</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/51018640</guid><author>skyflying2012</author><pubDate>Wed, 30 Mar 2016 19:47:42 +0800</pubDate><description><![CDATA[思考个小问题，处理器执行一条指令需要几个时钟周期。 
对于软件工程师来说，印象流我们可能会觉得执行一条指令一个时钟周期嘛，一条指令算是一个最小的原子操作，不可能再细分了吧。 
如果看看诸如《see mips run》，《arm体系架构》等书籍就会了解到，这个问题可没这么简单了，因为处理器设计中使用了流水线技术。 
一条指令还是相当复杂的，处理器在一个时钟周期内肯定是完不成的，可能需要好多个时钟周期来]]></description><category></category></item><item><title><![CDATA[uboot下netconsole的原理及使用方法]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/50916167</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/50916167</guid><author>skyflying2012</author><pubDate>Thu, 17 Mar 2016 18:54:43 +0800</pubDate><description><![CDATA[kernel下也有netconsole机制，不过由于内核下的console只有write功能（因为内核启动是没有交互的，只有输出信息），因此kernel下netconsole机制其实就是向内核注册提供网络发送数据功能的console_device，具体实现代码在drivers/net/netconsole.c中。]]></description><category></category></item><item><title><![CDATA[为什么空循环进程会导致CPU占有率很高？]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/50609050</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/50609050</guid><author>skyflying2012</author><pubDate>Fri, 29 Jan 2016 19:57:13 +0800</pubDate><description><![CDATA[linux系统是时间片调度算法，微观上所有可运行进程都是串行，不管进程中作何操作，该进程的时间片一到就切换到下一进程，那为什么一个空循环进程CPU占用率还这么高]]></description><category></category></item><item><title><![CDATA[2015年年尾总结]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/50444019</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/50444019</guid><author>skyflying2012</author><pubDate>Thu, 31 Dec 2015 23:05:10 +0800</pubDate><description><![CDATA[人就这样吧，闲着的时候老是感觉不踏实，想忙起来，忙的时候又想早点弄完休息休息，人这一辈子不就是在这一条无间之道上反复煎熬，踽踽独行吗。]]></description><category></category></item><item><title><![CDATA[收获的季节]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/49803609</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/49803609</guid><author>skyflying2012</author><pubDate>Thu, 12 Nov 2015 19:19:56 +0800</pubDate><description><![CDATA[我了解自己是一个追求成就感的人，坚持带给我很多成就感，那就坚持下去！]]></description><category></category></item><item><title><![CDATA[串口线的交叉直连之痛]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/49274313</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/49274313</guid><author>skyflying2012</author><pubDate>Tue, 20 Oct 2015 10:44:22 +0800</pubDate><description><![CDATA[首先我感觉要明确一点的是2台设备串口相连最基本的原则：
保证2台设备串口的收发引脚交叉相连，即设备的发送引脚与另一台设备的接收引脚相连，RX与TX交叉相连，其余引脚还是一一对应。]]></description><category></category></item><item><title><![CDATA[powerpc uboot链接脚本大改造]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/48846833</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/48846833</guid><author>skyflying2012</author><pubDate>Thu, 01 Oct 2015 16:40:50 +0800</pubDate><description><![CDATA[uboot中bss段的生成过程可以分为如下步骤：
（1）链接脚本中定义bss段地址范围__bss_start __bss_end。
（2）编译链接elf时，根据链接脚本确定下__bss_start __bss_end的绝对地址，记录在elf文件的段表中。
（3）elf objcopy生成u-boot.bin时，去掉bss段。
（4）加载u-boot.bin启动运行，根据__bss_start __bss_en]]></description><category></category></item><item><title><![CDATA[一场大雨引发的思考]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/48681951</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/48681951</guid><author>skyflying2012</author><pubDate>Wed, 23 Sep 2015 16:26:43 +0800</pubDate><description><![CDATA[2个人下雨天由公司去食堂吃饭，一个走的快，一个走的慢，哪个淋雨少。]]></description><category></category></item><item><title><![CDATA[powerpc-linux内核start_kernel之前启动分析（1）-开门见山]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/48496235</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/48496235</guid><author>skyflying2012</author><pubDate>Wed, 16 Sep 2015 16:34:06 +0800</pubDate><description><![CDATA[公司处理器换核，前期用FPGA仿真板进行了芯片验证和软件移植，借这个机会也学习了powerpc处理器的一些知识，对powerpc的内核启动也有所了解。 
完成了arm版本内核start_kernel之前汇编分析，也想尝试写几篇文章对powerpc的启动进行分析，与大家分享。其实不管哪个平台处理器，内核启动之初，因为运行地址无法保证与链接地址一致，都要完成一次地址的配置和跳转来保证内核运行地址与链接地址的一致性。]]></description><category></category></item><item><title><![CDATA[arm-linux内核start_kernel之前启动分析（3）-开启MMU，走进新时代]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/48054417</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/48054417</guid><author>skyflying2012</author><pubDate>Fri, 28 Aug 2015 16:35:38 +0800</pubDate><description><![CDATA[在第二篇启动分析文章中讲到create pgtable时，对__turn_mmu_on所在的1M地址空间做了平映射，到现在这个阶段就看出其作用了。
CPU执行完成“mcr p15, 0, r0, c1, c0,0”指令后开启MMU，接下来CPU取指地址是当前pc+4,由于做了平映射，虽然接下来是虚拟地址，但是该虚拟地址跟之前的物理地址是完全一致的，pc+4可以取到mrc p15, 0, r3, c0, c0, 0指令]]></description><category></category></item><item><title><![CDATA[kernel如何保证cache数据一致性]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/48023447</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/48023447</guid><author>skyflying2012</author><pubDate>Thu, 27 Aug 2015 10:31:21 +0800</pubDate><description><![CDATA[那么问题就来了，正因为嵌入式处理器软件管理cache，就需要我们代码主动去操作cache，但在内核开发中很少会直接进行cache操作，cache操作到底在哪里进行的，什么时候需要操作cache。
首先想明白一点，为什么要进行cache操作，只能说cache是天使也是魔鬼。cache在提高了系统性能同时却导致了数据的不一致性。嵌入式处理器软件管理cache的初衷就是保证数据一致性。
那什么地方需要保证数据一致性呢？
对于由CPU完全操作的数据，数据是完全一致的。也就是该数据完全由CPU写读操作，没有对CPU不]]></description><category></category></item><item><title><![CDATA[/dev/mem可没那么简单]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/47611399</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/47611399</guid><author>skyflying2012</author><pubDate>Thu, 13 Aug 2015 14:05:07 +0800</pubDate><description><![CDATA[这几天研究了下/dev/mem，发现功能很神奇，通过mmap可以将物理地址映射到用户空间的虚拟地址上，在用户空间完成对设备寄存器的操作，于是上网搜了一些/dev/mem的资料。网上的说法也很统一，/dev/mem是物理内存的全映像，可以用来访问物理内存，一般用法是open("/dev/mem",O_RDWR|O_SYNC)，接着就可以用mmap来访问物理内存以及外设的IO资源，这就是实现用户空间驱动的一种方法。
用户空间驱动听起来很酷，但是对于/dev/mem，我觉得没那么简单，有2个地方引起我的怀疑：
（]]></description><category></category></item><item><title><![CDATA[mac与phy如何实现网络自适应]]></title><link>https://blog.youkuaiyun.com/skyflying2012/article/details/47132149</link><guid>https://blog.youkuaiyun.com/skyflying2012/article/details/47132149</guid><author>skyflying2012</author><pubDate>Wed, 29 Jul 2015 18:46:28 +0800</pubDate><description><![CDATA[对于100M phy，外部网络10/100M切换，仅需要改变mac提供的数据时钟即可，mac接口模式不变，因为MII兼容10/100M。
对于1000M phy，外部网络10/100/1000M切换，首先需要改变mac的接口模式（使用的数据线个数不同了），因为10/100M下phy会切换为MII模式，根据接口模式在改变其数据时钟。
当然phy在自动协商完成后是其硬件逻辑会完成模式GMII/MII的转换，而对于mac，则要由驱动根据phy的工作状态来确定mac的接口模式以及需要提供的clk。
这也是我们软件开]]></description><category></category></item></channel></rss>