加载中…
加载中…
加载中…
加载中…
加载中…对于第一次接触驱动程序的人来说,printk一定不陌生,因为我们要用它在module加载时输出hello,world.对于print来说,这个很容易,但是printk却很有可能让你失望。第一次我在虚拟机上写该模块程序,平台是CentOS,发现虚拟终端怎么都不出现输出,几经周折后网上查到是要在主控制台。今天,我在笔记本上的gentoo写该程序,发现又出不来了,而且是主控制台也出不来。经过仔细学习研究,发现printk有如下特性:
printk输出信息时,会调用tty_write函数会使用fs指向的字符串,而fs是用户态的,因此调用printk时,printk会把fs修改为内核态数据段选择符ds中的值,从而指向正确的内核数据缓冲区,这个操作会先对fs进行压栈保存,tty_write调用完后再出栈恢复。总体上讲,print 于printk的区别就是fs与ds的区别。
另外,不能在主控制台显示输出的另一原因是,用printk,内核会根据日志级别决定是否把输出显示到控制台:
日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):
#define KERN_EMERG 0
#define KERN_ALERT 1
#define KERN_CRIT 2
#define KERN_ERR 3
一、NOR和NAND的区别
NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR
flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND
flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。
“flash存储器”经常可以与“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。
NOR的特点是芯片内执行(XIP, execute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。
【性能比较】
flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器
1. PC机的复位线和系统中的所有部件相连,包括CPU的RESET引脚
2. 系统上电开机时,主板电源系统发送低电平的'Power Good'信号,该信号送到复位接口电路的#RES端,产生时钟同步的复位正脉冲信号RESET,该脉冲发送到上面提及的复位线上,经由CPU的RESET引脚被CPU采集到,当正脉冲从1返回0时(下降沿),CPU启动内部初始化程序,初始化完成后进入实地址模式,其中CS:IP寄存器的状态是CS=F000H,IP=0000FFF0H;显然,CPU自初始化完毕后,系统的真正启动才开始,那么,也决定了第一条指令的地址为CS:IP=F000:FFF0H=FFFF0H单元。
3. 与此同时,开机协议规定,RESET时,BIOS ROM被加载到F0000H~FFFFFH,几乎所有BIOS在FFFF0H的指令为JMP BINI,这个BINI就是BIOS启动程序的首地址了
4. 结合2,3两点,PC机开机后的第一个程序就是BIOS启动程序了,这个启动程序的执行流程分为二步:
I. POST(Power On Self Test)
II.
按BIOS设置好的顺序逐一尝试加载启动媒体(硬盘,光驱,软驱,USB盘)的启动程序。对于我们常用的硬盘,则把0面,0道,1扇区的内容(512字节),也就是我们说的MBR加载到0000:7C00H单元开始的区域
BIOS是电源启动或重启
我在华为工作十年的感悟——徐家骏
作者背景:徐家骏是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数
据中心是用火山岩建的深入地下的一个大型建筑。防辐射,可防卫星的电子,雷达等手段的侦察。里面有像卫星发射中心那种超大屏幕,机房里满是三米的大型服务
器和大型计算机。连接整个华为全球的每一台终端,整个华为每天三十多万封邮件,海外和全球的同步研发,内部的信息管理,内部流程,华为的国内国际IP电话
都是通过出去。
上周,我正式提交了离职报告,准备给自己的职业生涯一个很大的转折,这是我长时
标签:
杂谈 |
一、使用autotools工具自动生成Makefile
1.autoscan
在给定的目录及其子目录树中检查源文件(若没有给出目录,就在当前目录及其子目录检查)。它会搜索源文件以寻找一般的移植性问题,并创建一个文件configure.scan
该文件就是后面autoconf要用到的configure.scan的原型
在进行第二步之前,先将生成的configure.scan改名为configure.in,并修改为:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure
script.
AC_PREREQ([2.65])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION],
[BUG-REPORT-ADDRESS])
AC_INIT(hello,1.0)
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(hello,1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header
Log4j有三个主要的组件,分别是loggers,appenders和layouts.这三种类型的部件工作在一起就能允许开发者根据记录信息的类型和级别来记录日志信息,并且在系统运行时能够按照不同的格式将这三类信息存储在指定的地方。
Loggers组件的主要功能是提供相应API,根据不同配置的loggers将不同级别的log输入到控制台或文件,类似于java中经常用到的System.out.println,但是log4j封装后的loggers组件能够输出更丰富的信息,包括时间,线程,log所在程序的行数等。log的级别从低到高依次为TRACE,DEBUG,INFO,WARN,ERROR
and
package com.ericsson.tm.log4j.test;
import org.apache.log4j.Level;
import org.ap