容易忘记的linux技巧(琐碎知识但很重要)

1、BSP - boot strap processor; AP - applicationprocessor 

       AP是除了BSP之外的所有CPU

2、中断share,假设IRQ1IRQ2中断共享

       1IRQ1IRQ2 idlehigh levellow level trigger;这时候触发中断是与逻辑,任意一个为low level,与的结果就是low level

       2IRQ1IRQ2 idlelow levelhigh level trigger;这个时候触发中断是或逻辑,任意一个为high,或的结果就是high level

3PCI-UART

       Legacy mode/PCI compatible mode/PIO mode只有downstream操作;DMA mode才会有upstreamdownstreamLegacy mode/PCI compatible mode可以工作在FIFO下也可以工作在非FIFO下,而PIO只能工作在FIFO下。

       In legacy mode, the base register is located at D17F0RxB3-B6.  InPCI compatible mode, it is at D10F0-F1Rx14In PCI HP/DMA mode, the location is at D10F0-F1Rx10.

       Legacy/PCI compatible使用的都是IO base AddressPCI HP/DMA使用mem base Address

4acpi.debug_layer=0x400000acpi.debug_level=0x4 apic=debug 

5printk日志级别控制

扫描二维码关注公众号,回复: 2827501 查看本文章

       cat  /proc/sys/kernel/printk

       4  4  1  7

       第一个参数:控制台日志级别

       第二个参数:默认的消息日志级别

       第三个参数:最低的控制台日志级别

       第四个参数:默认的控制台日志级别

       值越小,优先级越高

       只有当printk的日志级别小于console_loglevel时,消息才能显示出来

6Make menuconfig中关于抢占的

       Make menuconfig

              Processor typeand features

                     PreemptionModel(。。。。)

7、禁止唤醒抢占特性

8zhaoxin cpu支持C3 stop lapic timer

9Cx state是在G0S0working)时候才会有变化,不会在G1S1)有变化,具体看ACPI spec

10HIF:Host interconnection FabricVPIVia Processor InterconnectHIF你可以看成是chipsetCPU相连的总线接口,VPI是两套processor相连的接口。

11lscpu查看cpu的相关信息

12、关于MSI

       X86系统中有两类设备可以产生MSIIOAPICMSI capability device;不管是IOAPIC还是MSI capability device产生的MSI,最后都是由lapic认领的,IOAPIC可以认为是广义上的MSI capabilitydeviceLAPIC 认领MSI的方式参照LAPIC文档(MSI先给socketHIFHIF根据TPR table转发给相应的lapic)。MSI只能由LAPIC认领,其他也不认识他。

       dual socket中,MSI先给本地socketHIF,然后根据HIFTPR table决定是否进行转发到remote socketHIF中。对于是否是本地是根据core的编号。

13、对内核code要关注:KconfigMakefileREADME文件,有助于帮助理解。

14Linux学习网站收集:

Linux Kernel MailListhttp://vger.kernel.org/vger-lists.html#linux-kernel

下载内核代码、查看patch、跟踪bughttps://www.kernel.org/

Linux 技术新闻:https://lwn.net/

http://www.chinaunix.net/

15grep –nR  字符串,在当前文件夹所有文件中查找字符串

16、关于IO port

       通过cat /proc/ioports可以查看IO 分配情况

       通过hexedit –s/dev/port,可以更改和编辑相应的port

17、关于IOMEM

       通过cat /proc/iomem查看iomem的分配情况

 

18、产生patch和添加patch

产生patch

1)纯净的代码A,执行make distclean

2)将A拷贝一份到B

3)将修改的文件放入B

4)执行diff -rNu A B > file

添加patch的办法:

1)新的代码C

2cd C

3patch -p1 < mypatch

19、查看ACPI Table

/sys/firmware/acpi/tables

20PCI-UART RTS

Eli:

RTS3可以通过写UART MMIO Rx04[1]来控制输出1/0

这个是PC16550 SPEC规定的:

     FORCE_RTS = 0 -> RTS -> 1;

     FORCE_RTS = 1 -> RTS -> 0;     

1

RW

RO

0

Force Request to Send

Setting this bit to 1 makes the Request to Send line active.

FORCE_RTS

vcc

x

x

x

21、可以在/sys/dev目录下查看blockchar类型设备的相关信息,通过/sys/dev/char目录可以查看字符设备的主次设备号,该目录下是链接文件,可以通过ls –al查看链接的是哪个文件。

22Useful Websites:

         https://stackoverflow.com/

        

23linux操作PCI configuration space

参考下面代码

//HPET INT POLconfig

#definePCI_CONF1_ADDRESS(bus, devfn, reg) \

                (0x80000000 | ((reg &0xF00) << 16) | (bus << 16) \

                | (devfn << 8) | (reg& 0xFC))

 

        /* ISA Bridge D17F0 */

        reg = 0x68;                     //back door reg

        outl(PCI_CONF1_ADDRESS(0, 0x88, reg),0xCF8);

        value = inl(0xCFC);

        pr_info("----hpet: %s: D17F0 reg%x=%x\n", __FUNCTION__, reg, value);

 

        if (hpetintpol == 1)

                value |= 0x00000010;    //bit4=1 line dep

        else

                value &= 0xFFFFFFEF;    //bit4=0 trigger dep

        outl(value, 0xCFC);

 

        value = inl(0xCFC);

        printk("----hpet: %s: HPET INT Polmode %x: %s\n", __FUNCTION__, value, value & 0x00000010 ? "LineDep" : "Trigger Dep");

24、可以参考documentation\Kernel-parameters.txt和documentation\x86\x86_64\Boot-options.txt设定Grub中响应的参数。

 

猜你喜欢

转载自blog.csdn.net/qq_38712943/article/details/80856124