学习笔记

 

什么叫NOR flash可以片内执行? NAND为什么不可以?

NOR flash可以片内执行是指CPU可以直接从NOR里面取指令和数据来执行,不需要经过RAM。原因是①NOR的地址线、数据线、控制线可以直接和CPU连起来满足CPU的控制要求。②NANDNOR存在倒置存取方式差异,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);//表示睡眠1msmsleep()实际上与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的快捷方式相同。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值