什么叫NOR flash可以片内执行? NAND为什么不可以?
NOR flash可以片内执行是指CPU可以直接从NOR里面取指令和数据来执行,不需要经过RAM。原因是①NOR的地址线、数据线、控制线可以直接和CPU连起来满足CPU的控制要求。②NAND和NOR存在倒置存取方式差异,NOR可基于字节读取,而NAND只能基于块读取。这也就决定了NAND只能将数据和指令先读到RAM里面,然后再执行。
____________________________________________________________________________________________________________________________
/etc/profile和~/.bash_profile设置环境变量的区别
/ect/profile设置的环境变量能对所以的用户起作用,而~/.bash_profile设置的环境变量只会对某个用户起作用
__________________________________________________________________________________________________________________________
如何将自己写的驱动程序编译进内核?
静态加载:
1、如写的是一个字符设备驱动程序test,将test.o文件拷贝到linux/driver/char 目录下
2、修改Makefile,然后在Mkaefile 中加入obj-$(CONFIG_TEST) += test.o
3、修改Kconfig ,在Kconfig中加入config TEST
然后make ARCH=arm menuconfig 查看TETS是否已经在字符设备驱动中
动态加载:
模块用 modprobe, lsmod命令
____________________________________________________________________________________________________________________________
驱动是如何实现中断的?
驱动通过int request_irq(
unsigned int irq,
irqreturn_t (*handler)(int, void *, struct pt_regs *),
unsigned long flags,
const char *devname,
void *dev_id)向内核注册一个中断,其中irq为中断号,handler为中断处理函数
Irq通过int platform_get_irq(struct platform_device *dev, unsigned int num)获得,platform_get_irq会调用platform_get_resource(dev, IORESOURCE_IRQ, num)来得到一个中断资源。而hanlder则为自己编写的中断处理函数,对中断进行处理。
____________________________________________________________________________________________________________________________
内核里如何实现us级的睡眠等待?
udelay( )等待会占用CPU,所以udelay( )是忙等待。如果要实现ms甚至us级的睡眠等待可以用
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout((1*HZ)/1000000);//小睡1us,其中1*HZ表示1s。
或者用
msleep(1);//表示睡眠1ms,msleep()实际上与schedule_timeout()是同一个系统函数实现的。
____________________________________________________________________________________________________________________________________
代码段、数据段、堆、栈,分别表示哪块内存,分别存放程序的什么部分?
一个可执行二进制程序在存储(没有调入到内存运行)时用有三个部分,分别是代码段(text)、数据段(data)和BBS(未初始化数据)段。这3个部分一起组成了可执行的程序文件。
代码段(text segment):存放CPU执行的机器指令。代码段通常是只读的,这样可以防止其他程序意外地修改其指令。另外,代码段还规划了局部数据所申请的内存空间信息。也就是说如果定义局部变量int a = 10 ;那么,int a是存储在代码段里面。
数据段(data segment):该段包含了在程序中明确被初始化的全局变量、静态变量(static)和常量数据(字符串常量)。
未初始化数据段(BBS block started symbol):该段存入的时全局未初始化变量、静态未初始化变量。
而当程序被加载到内存单元时,则需要另外两个域:堆和栈。一个正在运行的C程序占用的内存区域可以分为:代码段、数据段、BBS、堆、栈,五个部分。
栈(stack):存放函数的参数值、局部变量的值,以及在进行任务切换时存放当前任务的上下文内容。
堆(heap):用于动态内存分配,即,使用malloc/free系列函数来管理的内存空间。
在将应用程序加载到内存空间执行时,操作系统负责代码段、数据段、BBS段、栈的加载,并在内存中为这些段分配空间。而堆则由程序员自己管理,即显示地申请和释放空间。
____________________________________________________________________________________________________________________________________
linux下各种命令
查看linux硬盘空间使用情况的命令:df -l
查看内存空间使用情况:free或者top -d 1
查看cpu使用率: top -d 1
查看一个文件A所占用的存储空间大小:ls -ls A或者du -s A
____________________________________________________________________________________________________________________________________
当执行某个可执行文件时,这个文件明明在这个目录下却提示bash:./... 不存在的文件或目录。这是什么原因呢?
这是因为这个可执行文件是32位的可执行文件,而系统却是64位的系统。通过file ...可以查看这个可执行文件到底是32位还是64位。Ubuntoo的解决方法是apt-get install ia32-libs
____________________________________________________________________________________________________________________________________
硬链接和软链接的区别?
链接方式有硬链接和软链接两种。如某个文件夹里存储了文件1和文件2,假设文件1和文件2对对应的文件节点为110 和220。
名称 节点
1 110
2 220
对文件1进行硬链接的书写格式为:ln 1 3
那么同目录下就会出现一个名称为3的硬链接
名称 节点
1 110
2 220
3 110
这个时候,链接3会和链接1指向同一个文件节点。在linux里面不能对一个目录进行硬链接。而且,用ls -ls显示硬链接的大小,会发现硬链接文件和源文件一样大,但实际上,硬链接是不占用磁盘空间的。
对文件2进行软链接的书写格式为:ln -s 2 4
名称 节点
1 110
2 220
3 110
4 xxx
软链接的执行过程是先将2的文件目录复制到4,这样执行4时,先从中得到2的路径,找到2这个文件,再对2进行操作。软链接会占用很小的磁盘空间,而且可以对目录进行软链接。软链接与windows的快捷方式相同。