1、BSP - boot strap processor; AP - applicationprocessor
AP是除了BSP之外的所有CPU
2、中断share,假设IRQ1和IRQ2中断共享
(1)IRQ1和IRQ2 idle为high level,low level trigger;这时候触发中断是与逻辑,任意一个为low level,与的结果就是low level。
(2)IRQ1和IRQ2 idle为low level,high level trigger;这个时候触发中断是或逻辑,任意一个为high,或的结果就是high level。
3、PCI-UART
Legacy mode/PCI compatible mode/PIO mode只有downstream操作;DMA mode才会有upstream和downstream。Legacy 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-F1Rx14. In PCI HP/DMA mode, the location is at D10F0-F1Rx10.
Legacy/PCI compatible使用的都是IO base Address;PCI HP/DMA使用mem base Address。
4、acpi.debug_layer=0x400000acpi.debug_level=0x4 apic=debug
5、printk日志级别控制
cat /proc/sys/kernel/printk
4 4 1 7
第一个参数:控制台日志级别
第二个参数:默认的消息日志级别
第三个参数:最低的控制台日志级别
第四个参数:默认的控制台日志级别
值越小,优先级越高
只有当printk的日志级别小于console_loglevel时,消息才能显示出来
6、Make menuconfig中关于抢占的
Make menuconfig
Processor typeand features
PreemptionModel(。。。。)
7、禁止唤醒抢占特性
8、zhaoxin cpu支持C3 stop lapic timer
9、Cx state是在G0(S0,working)时候才会有变化,不会在G1(S1)有变化,具体看ACPI spec。
10、HIF:Host interconnection Fabric;VPI:Via Processor Interconnect;HIF你可以看成是chipset和CPU相连的总线接口,VPI是两套processor相连的接口。
11、lscpu查看cpu的相关信息
12、关于MSI
X86系统中有两类设备可以产生MSI:IOAPIC和MSI capability device;不管是IOAPIC还是MSI capability device产生的MSI,最后都是由lapic认领的,IOAPIC可以认为是广义上的MSI capabilitydevice。LAPIC 认领MSI的方式参照LAPIC文档(MSI先给socket的HIF,HIF根据TPR table转发给相应的lapic)。MSI只能由LAPIC认领,其他也不认识他。
在dual socket中,MSI先给本地socket的HIF,然后根据HIF的TPR table决定是否进行转发到remote socket的HIF中。对于是否是本地是根据core的编号。
13、对内核code要关注:Kconfig、Makefile、README文件,有助于帮助理解。
14、Linux学习网站收集:
Linux Kernel MailList:http://vger.kernel.org/vger-lists.html#linux-kernel
下载内核代码、查看patch、跟踪bug:https://www.kernel.org/
Linux 技术新闻:https://lwn.net/
15、grep –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
(2)cd C
(3)patch -p1 < mypatch
19、查看ACPI Table
/sys/firmware/acpi/tables
20、PCI-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目录下查看block和char类型设备的相关信息,通过/sys/dev/char目录可以查看字符设备的主次设备号,该目录下是链接文件,可以通过ls –al查看链接的是哪个文件。
22、Useful Websites:
23、linux操作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中响应的参数。