概述: 当前开发中,我使用的Keil开发工具较多(keil526),故以keil为例进行介绍,其他开发环境大同小异. 1. 编译链接的定义 不管我们编写的代码有多么简单,都必须经过「编译 --> 链接」的过程才能生成可执行文件: 编译就是将我们编写的源代码“翻译”成计算机可以识别的二进制格式,它们以目标文件的形式存在: 链接就是一个“打包”的过程,它将所有的目标文件以及系统组件组合成一个可执行文件. 抛开嵌入式而言,C语言的编译器有很多种,不同的平台下有不同的编译器,例如: Windows 下常…
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 在云计算时代,虚拟机和容器已经成为标配.它们背后的网络管理都离不开一样东西,就是虚拟网络设备,或者叫虚拟网卡,tap/tun 就是在云计算时代非常重要的虚拟网络网卡. tap/tun 是什么 tap/tun 是 Linux 内核 2.4.x 版本之后实现的虚拟网络设备,不同于物理网卡靠硬件网路板卡实现,tap/t…
杂谈 工作了一天,脑袋比较乱.一直想把底层的知识写成一个系列,希望可以坚持下去.为什么要写底层的东西呢?首先,工作用到了这部分内容,最近和内部Flash打交道比较多,自然而然会接触到一些底层的东西:第二,近些年来Cortex-M阵营各厂商(ST.Nordic.ATMEL……)对新产品的迭代速度越来越快,以及微控制器应用普及程度的加深,越来越多的开发者把更多精力投注在应用层开发上,花在对底层技术上的时间越来越少,更深层次的原因是走嵌入式底层没有做互联网上层赚钱.希望自己可以把嵌入式ARM Cort…
内核:Linux-3.4.2 编译内核出现arch/arm/mm/tlb-v4wbi.S:64:error: too many positional arguments 交叉工具链太老了,换新一点的. 换成 4.3.2的, 还有可能是你换4.3.2的了,但是交叉工具还没安装成功,所以,在编译前,要查看是否安装成功   arm-linux-gcc   -v…
Code maturity level options代码成熟度选项 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 General setup常规设置 Local version - append to kernel release 在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到 Automaticall…
深入php内核,从底层c语言剖析php实现原理 非常好的电子书:http://www.cunmou.com/phpbook/preface.md   这是它的目录: PHP的生命周期 让我们从SAPI开始 PHP的启动与终止 PHP的生命周期 线程安全 小结 PHP变量在内核中的实现 变量的类型 变量的值 创建PHP变量 变量的存储方式 变量的检索 类型转换 小结 内存管理 内存管理 引用计数 总结 配置编译环境 编译前的准备 PHP编译前的config配置 Unix/Linux平台下的编译 在…
嵌入式系统更新内核 1. 前言 手里有一块Friendly ARM的MINI2451的板子,这周试着编译内核,然后更新一下这个板子的Linux内核,想要更新Linux Kernel 4.1版本,但是种种原因实在是没有更新成功:于是使用Friendly ARM板子提供的3.6版本的内核,但是他们的内核全都配置好了,你只需要按照常规的方法进行编译就好了,貌似不能更深入的理解内核, 后来我从kernel.org官网上下载原版内核,然后一点点的把2451这个板子需要文件移植过去,可谓是问题百出啊,也学习…
灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F0010的GPIO初始化配置 7.MM32F0010 GPIOA PA7驱动LED灯每隔一秒翻转一次 1.前言: MM32F0010是基于ARM Cortex M0核的32位微控制器(MCU)即32位的单片机,使用库函数开发,每一个片上外设都有与之对应的外设xx.c和xx.h库函数,例如:hal_rcc.…
1.简介 在内核调试中,会经常出现内核僵死的问题,也就是发生死循环,内核不能产生调度.导致内核失去响应.这种情况下我们可以采用修改系统内核中的系统时钟的中断来定位发生僵死的进程和函数名称.因为内核系统系统时钟采用的是硬件中断的形式存在,所以,软件发生僵死的时候,系统时钟照样会发生中断. 1.1.我们在命令行输入:# cat /proc/interrupts  # cat /proc/interrupts CPU0 30: 8316 s3c S3C2410 Timer Tick -----> 系统…
支撑Java NIO 与 NodeJS的底层技术 众所周知在近几个版本的Java中增加了一些对Java NIO.NIO2的支持,与此同时NodeJS技术栈中最为人称道的优势之一就是其高性能IO,那么我们今天要讨论的话题就是支撑这些技术的底层技术. 开始之前先要提出的一个问题是: 为什么NodeJS和Java NIO2没有在更早的时间出现? 答案:个人认为是底层的支撑技术还不成熟. 那么,底层技术指的是什么呢?对的,我想很多人已经猜到,是操作系统技术.本文提出的两个概念Java NIO2和Node…