知识点汇总

1、为什么在中断上下文中不允许获取信号量?
   在中断上下文中,禁止了抢占(HARDIRQ/SOFTIRQ/NMI)。获取信号量时,可能会阻塞。阻塞后,由于禁止了抢占,无法调度其它进程,而当前进程又被阻塞。其它进程没法将其唤醒。
2、原子量如何保证双核互斥?
     CPU体系结构本身提供原子操作指令或提供锁系统总线的指令。
3、kmalloc和vmalloc哪个效率高,为什么?
     要点在于TLB抖动。
4、在使用ioctl系统调用时,为何要使用copy_from_user/copy_to_user,可以直接用户空间传递的buffer吗?
      可以使用。但是可能会导致内核深度挂死。而使用copy_from_user/copy_to_user只会导致进程该死,segment fault。
5、spinlock和信号量的差别?
6、linux中异常向量表在哪儿配置?
7、地址空间分配?
    一致性dma空间: 0xff000000~0xff?????? dma_coherent_malloc
    非一致性dma空间:
    异常向量表:
    静态IO地址映射:
    动态模块加载空间
    --1G内核空间(0xC0000000~0xFFFFFFFF)
        --896M内存直接映射空间(0xC0000000~0xF8000000)
--128M高端地址空间(0xF8000000~0xFFFFFFFF)
            --
    --VMALLOC区(high_memory+8MB&( 8M-1)~0xFF000000)
    --4K异常向量区(0xFFFF0000~0xFFFF0FFF)
    --3G用户空间(0x00000000~0xBFFFFFFF)
8、arm各种工作模式切换代码?
9、页表、MMU表在哪儿配置?
10、linux低功耗机制
    a、运行时低功耗
    b、睡眠
    c、dpm
    d、cpm
    e、wakelock
    这几者之间的关系?
11、high memory(高端内存)
    high memory只在32位linux kernel上有效。
     high memory针对的是物理地址。
    在32位linux kernel上,共有4G虚拟地址空间,划分为1G kernel space/3G user space。1G kernel space又划分为896M+128M。
    896M为low memory空间,用来直接映射物理内存。因此当物理内存超过896M时,超过的部分是无法映射到low memory空间,内核是无法直接访问的。但这段空间浪费又可惜了。可以将这段内存通过kmap/vmalloc动态映射到高128M空间上去。这段内存空间就是low memory。
    如果物理内存<=896MB,则没有high memory;如果物理内存>896MB,则超出部分作为high memory。
    128M用来做其它用途。主要有:IO地址映射(通过IOADDRESS宏);异常向量表;vmalloc空间;ioremap空间;等等。
12、XX芯片项目流程
    参与人员:硬件(1)+软件(2)+芯片(2:仿真/版本)
    芯片提供FPGA逻辑
    软件提供小系统(fastboot/kernel(clk/sys timer/uart/machine))
    软件调试小系统
    软件调试所有模块
    全系统调试
13、linux系统待学习知识点
    ramdisk -- ok
    uart/console/tty
    dts
    start_kernel堆栈
    atags解析
    gic设置(中断触发方式、硬件中断号和软件中断号)
    gpiolib
    schedule
    cpuidle/wakelock/pm
    kbuild
    uevent
    softirq -- ok
    tasklet -- ok(注意点是tasklet内部和tasklet之间的互斥问题)
    workqueue
    等待队列
14、什么是VPN?
    虚拟专用网络(Virtual Private Network)。在公共的internet链路上虚拟一条专用链路。所谓的虚拟,就是在VPN服务器和客户端之间进行数据加密,以使客户端借助VPN服务器访问VPN服务器所能访问的企业内部资源。进行数据加密,是为了保证企业内部资源不被泄露出去。为保证企业内部资源不被泄露。企业内部资源的访问看起来是VPN服务器在防卫,实际是客户端在访问。
15、fqrouter
    pick & play --  扫描当前网络中的其他设备(iPhone,个人电脑等)。然后从扫描出来的列表中选取你希望翻墙的设备,这样那台设备就可以通过fqrouter翻墙了。
16、中断栈
       很早以前,中断处理程序没有自己的栈,共享被其所中断进程的栈。进程栈大小为两页(32位机器:8K;64位机器:16K)。
       在早期的2.6内核版本中,增加了一个选项,将栈的大小从两页变为一页。这就减轻了内存的压力。因为系统中原先都需要两页不可换出的的内核内存。为应对栈大小的减少,中断处理程序拥有了自己的栈,每个处理器一个,大小为一页。
17、模块
    模块依赖
        depmod命令重新产生模块之间的依赖。
        depmod -A命令只为新模块生成依赖信息。
        模块的依赖关系信息存放在/lib/modules/version/modules.dep中。
    模块加载
         insmod/rmmod不考虑模块之间的依赖,不进行错误检查。
         modprobe提供模块依赖性分析,错误智能检查以及许多其它的功能。不但会加载指定的模块,还会加载依赖的模块。
    模块参数
        模块参数也将出现在sysfs中( 附着在那个文件节点上? )。参数perm指定了模块在sysfs文件系统中对应文件的权限(例如:S_IRUGO | S_IWUSR),如果为0,禁止所有的sysfs项。
    模块构建
        模块可以放在内核中或内核外,其区别在于构建过程。
        放在内核中靠make ... modules命令。
        放在内核外需要致命内核源码路径和模块基础Makefile路径。例如:make -c /kernel/source/location SUBDIRS=$PWD modules
18、tasklet和softirq
    在多核的情况下softirq要考虑多核之间的同步、tasklet不用考虑多核之间的同步。     
19、设备、总线和模型
20、LTE MODEM信息基本概念
       RF->ABB->BBP:RF天线接收信号;ABB解扰解码基带信号,并转换成数字信号;BBP对数字信号进行协议解析,转化为移动网络数据包(IP+PDCP+RNC)。这里BBP是一般统称,根据芯片对多模的支持情况,具体有G BBP、L BBP、W BBP、TD BBP等。
       多模:现在一般支持下面几种移动网络制式:2G的有GSM、CDMA(主要是电信);3G的有TD-SCDMA、WCDMA、CDMA20000(主要是电信);4G有LTE,包括TD LTE和FDD LTE。这里的多模指得是支持上面提到的制式中的多个。
       多猫:这里的猫要和模区分开来。“”指的是支持的移动网络制式,而“”指的是有几个基带处理通道,每个通道可能为一个模,也可能是多个模。这里面,“猫”的概念不一定是基带芯片的概念。多猫既可能是多个基带处理芯片(成本太高),更多的可能是只有一个基带处理芯片,但这个基带处理芯片中支持多个通道。一般来说,一张sim卡要用一个猫。
      主卡和副卡:很多手机支持双卡,其中一张是主卡,另一张是副卡。主卡支持的模数最多(L模、W模、TD模、GSM模),副卡一般只有一个GSM模。
      五模十三频:五模指GSM、TD LTE、FDD LTE、WCDMA、TD-SCDMA。十三频是指每个模支持的频段个数的总和。
      业务分配:一般TD LTE、TD-SCDMA、WCDMA主要传输数据业务、GSM传输语音业务。
      多模互操作:在基带芯片中,可能同时支持TD LTE、TD-SCDMA、GSM。根据网络状况和业务场景,可能在多个模之间进行切换。比如在某个地方,TD LTE信号不好,TD-SCDMA信号好,主模锁定在TD-SCDMA;在另外一个地方TD LTE信号有好了,主模又锁定在TD LTE上。有比如,当前在上网,主模锁定在TD LTE。在上网过程中电话打进来了,主模切换到GSM。在主模工作的空闲时间里,会周期性的给从模搜锁并锁定信号。为从模锁定信号的目的,我觉得是当主模由于某种原因需要切换到从模后,可以使用已经存储的信息进行快速切换。
21、FTP业务
      FTP是应用层协议,对应传输层协议中的TCP协议。在FTP传输数据时,会同时创建控制连接和数据连接。假如传输4个文件,会有4个数据连接,但只有1个控制连接。控制连接使用下载中指定的端口号(比如21),但数据连接的端口号是不停变化的。我们在测试中遇到一种情况,nf_conntrack表满了,就是因为传输的文件个数非常多,并且都是小文件。前面的文件传输完成后,数据连接还来不及超时删除,后面的数据紧接着添加,从而导致爆表。
22、GIC
    0-15分配给SGI,用于软件产生的中断,比如SWI,典型的应用的系统调用。
    16-31分配给PPI,主要给本核产生中断,不允许连接到其它的核。
    32-1020分配给SPI,可以提供给多个核,具体提供给哪个模块可以配置。
23、socket编程
服务器端:
    step 1、创建socket
   socket(PF_INET,SOCK_STREAM,0);
    step 2、绑定地址(常采用INADDR_ANY:本机上的所有网卡)和端口
        bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr));
    step 3、监听socket。创建等待队列以便存放来自客户端的连接。
listen(server_sockfd,5); -- 监听队列长度为5
    step 4、接收客户端的连接。
client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size);
        客户端连接建立后,会创建一个新的客户端连接于客户端通信。而服务器命名套接字则保留下来继续处理来自客户端的连接。
客户端:
    step 1、创建socket
    client_sockfd=socket(PF_INET,SOCK_STREAM,0)
    step 2、连接服务器端
connect(client_sockfd,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr);
    step 3、数据收发
    send/recv
24、ICMP地址不可达
    type=3 code=0
    导致出现imcp地址不可达的ip header和ip header_end~ip header_end+8
25、如何在init.rc中执行shell脚本
    on boot
exec /system/bin/sh /system/etc/my.sh
26、手机目录中/storage目录下包括emulated/sdcard0/sdcard1/usb-ext三个目录,分别用来干啥?
27、kmemleak
检测使用kmalloc/vmalloc/kmem_cache_alloc接口申请的内存。
为什么这么说呢?
vmalloc->kmemleak_alloc
kmalloc->kmalloc_large->kmalloc_order_trace->kmalloc_order->__get_free_pages+kmemleak_alloc
kmalloc->kmem_cache_alloc_trace->kmem_cache_alloc->trace_kmem_cache_alloc(好像不是,确认一下?
kmem_cache_alloc->trace_kmem_cache_alloc(好像不是,确认一下?
不能检测使用page_alloc分配的内存。
当kmemleak扫描时发现没有指针指向某内存块的“起始地址”或“块内任何地址”时(这点是怎么探测的?,就认为该内存块泄露。因为没有人索引它就意味着没有人可以去释放它。
28、Makefile
a、目标重置,如下:
DEFAULT_GOAL := balong
$(DEFAULT_GOAL): #目标1

balong:trans_file #目标2

目标1只是起占位功能,真正执行在目标2。
b、
= 使用时展开
:= 立刻展开
?=增量展开,不覆盖以前的值
c、FORCE #无论依赖是否更新,目标强制重新编译
  .PHONY:FORCE
  FORCE:;
例如:
a:b #如果b没有更新,a不会重新编译
a:b FORCE #即使b没有更新,a也会重新编译
29、内存分配释放接口
a、kmalloc/kfree
>>大于8k,调用__get_free_pageskmalloc_large)直接从伙伴系统中分配;
>>小于8k,从13个kmalloc-xxxx(8、16、32、64、128、256、512、1024、2048、4096、8192、96、192)slab中申请(kmem_cache_alloc_trace->kmem_cache_alloc)。
b、kmem_cache_alloc/kmem_cache_free
>>首先看freelist中是否有空闲的:如果有,直接从里面摘除一个使用;如果无,调用_slab_alloc重新分配一个
>>核心函数kmem_cache_alloc
c、mempool_alloc/mempool_free
    >>kmem cache中的一种。
    >> 核心函数kmem_cache_alloc
d、__get_free_pages、__get_free_page
>>从伙伴系统中分配;
>>核心函数__get_free_pages
e、alloc_pages
>>核心函数alloc_pages
f、 dma_alloc_coherent/ dma_free_coherent
>>核心函数alloc_pages
g、 vmalloc
>>vmalloc分配出来的内存使用vm_struct来管理(在vmlist链表中)。
>>核心函数alloc_page
h、do_page_fault
30、内存管理层次
zone(区域) # ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM
buddy(伙伴)#(2^0、2^1、2^2、2^3、2^4、2^5、2^6、2^7、2^8、2^9、2^10、2^11pages(4k)=(4k~8M
slab(后备高速缓存)
31、/proc/meminfo
a、如何查看空闲内存
memfree+buffered+cached+slab(reclamable部分)
32、可维可测
在M3核中,有一个任务或中断来处理A核和C核的喂狗消息。如果A核或C核长时间没有喂狗并给M3核发送喂狗消息,则M3会将向A核发送IPC中断,通知A核进行看门狗复位(消息中记录了是哪个核进行了复位)。
但是如果是在M3核本身某处挂死的话,则看门狗两次中断都没人喂狗,则硬狗复位。硬狗复位后,因为没有给A核发送消息,记录不下来异常信息。
33、信号的传输速度
取决于信号编码(一个信号代表多少个比特) + 一个信号占用的时间长度
34、usb in传输
>>pc发送一个in令牌包
>>usb发送一个data数据包(<512表示一个传输结束:如何判断呢?数据包没有内容字段,PID字段后紧跟CRC16
>>pc回复ack包
35、kprobe
内核探测点。
步骤1、创建一个探测点
步骤2、注册探测点(register_kprobe)
>>在注册探测点时,其实是替换挂载探测点的函数中的某条语句,将该语句替换为undefine指令。被替换的指令保留起来。当运行到此指令时,先执行undefine指令,进入undefine异常处理。在异常处理代码中,先处理注册的探测函数。处理完探测函数后,再执行之前被替换的指令。
36、c核打reset断点,用于调试c核。虽然一开始连接不上仿真器(因为m3还没有解复位C核),但一旦C核解复位,就会断在reset处。
37、安全模式和非安全模式
  首先,内存和各个外设均划分为安全区和非安全区;
其次,各CPU和各MASTER划分为安全模式和非安全模式。
非安全模式下的CPU或MASTER只能访问非安全区,不能访问安全区;
安全模式下的CPU或MASTER既能访问非安全区,也能访问安全区;
38、拨号和打电话的本质
拨号:基站会将自己的小区信息对外广播(如移动BAND1 BAND2、联通BAND1 BAND2、电信BAND1 BAND2)。手机发送AT拨号命令后,扫描基站小区信息信息并记录。然后根据自己的SIM卡信息向基站对应的小区发送接入请求,基站检查SIM看信息后,看是否允许接入。允许接入后,回复控制信令给手机,手机接入成功。拨号成功后,接入网络,手机上会显示接入的小区信息,如中国移动、中国联通、中国电信。
39、secure android
最小权限访问。每个进程只能访问对其授权的客体资源。
标签。
策略。主体对客体的访问权限控制策略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值