è¿æç« ç®æ¯æè¿å·¥ä½çå¤å¿ã
FDTæ¯ARM
Linuxææ°ç设å¤é©±å¨ç¨åºä¿¡æ¯è¡¨ï¼ä½¿ç¨FDTçå
æ ¸ï¼å°±ä¸ç¨åè¿å»çå
æ ¸é£æ ·ï¼ä¸ä¸ªæ¿åå ä¸ä¸ªmachçCæ件ï¼ææç设å¤ä¿¡æ¯å¯ä»¥è®°å½å¨ä¸ä¸ªæ ç¶ä¿¡æ¯æ件éé¢ã
ç®åè¿æ¹é¢èµææ¯è¾å°ï¼æ以AM335xå¤çå¨ä¸ºä¾æ¦æ¬ä¸ä¸FDTç使ç¨ï¼
FDTä»
ä»
æ¯ä¸ä¸ªä¿¡æ¯çç®å½ååæ°è¡¨ï¼è¦ä½¿ç¨æ个åè½å
æ ¸ä¸è¿å¿
é¡»æç¸åºç驱å¨ç¨åºä»£ç
FDTçæºæ件ä½ç½®å¨ï¼arch/arm/boot/dtsï¼ä¾å¦ï¼TIçBeagle bone blackï¼æºæ件æ¯arch/arm/boot/dts/am335x_boneblack.dts
FDTå¨make ARCH=armçæ¶åå°±ä¼èªå¨çæï¼ä¹å¯ç¨make ARCH=arm
dtbsæ¥çæï¼ä¾å¦TIçBeagle bone blackçæçæ件æ¯arch/arm/boot/dts/am335x_boneblack.dtbï¼è¿æ¯ä¸ä¸ªäºè¿å¶æ件
è¦æ³æ°å¢ä½ èªå®ä¹çFDTï¼è¯·ä¿®æ¹arch/arm/boot/dts/Makefileï¼å¹¶å¨ç¸åºçKconfigä¸å¢å configé项ï¼ä¾å¦ï¼TIçBeagle
bone blackï¼Kconfigçä½ç½®å¨arch/arm/mach-omap2/Kconfig
FDTçdtbæ件ç±u-bootä¼ éç»å
æ ¸ï¼u-bootå¿
é¡»æè¿ä¸ªæ件æ·è´å°å
æ ¸è§£åå°åä¹åçæ个ä½ç½®ï¼ç¡®ä¿å
æ ¸è§£åçæ¶åä¸ä¼è¦çï¼ç¶å使ç¨âbootm
[å
æ ¸å°å] - [dtbå°å]âæ¥å¯å¨å
æ ¸
å¦ædtbæ件ä¸æ£ç¡®ï¼å¯¹äº3.10以ä¸çå
æ ¸ï¼å¯è½ä»ä¹æ¾ç¤ºé½æ²¡æï¼3.8å
æ ¸ï¼å¯è½å°±æ¾ç¤ºå°Uncompressing kernel......done
FDTçç¼åè§å说æå¨Documentation/devicetree/bindingsï¼ä¸åç设å¤æç¸åºçtxtæ件说æï¼å
¶ä¸çâcompatibleâå¯ä»¥ä½ä¸ºå
³é®åæ索驱å¨ç¨åºçæºæ件ï¼ä¾å¦ï¼AM335xçGPIOï¼ç¨âti,omap4-gpioâ为å
³é®åï¼å¯ä»¥æ¾å°å
¶ä»£ç ä½äºdrivers/gpio/gpio-omap.c
FDTå¯ä»¥å
å«åæ件ï¼æ¯å¦am335x_boneblack.dtså°±å
å«äºam33xx.dtsiï¼am335x-bone-common.dtsi
以ä¸ä¸ªä¾åæ¥è¯´æç¼åè§åï¼æçæ¿åä¸ï¼I2C0ä¸æäºä¸ä¸ªé³é¢CODECï¼å
¶å°åæ¯0x18ï¼åå·æ¯TLV320AIC3104IRHBTã
å
æ¾å°i2c0èç¹çä½ç½®ï¼è¿å¨arch/arm/boot/dts/am33xx.dtsiä¸ï¼
i2c0: i2c@44e0b000
{
compatible =
"ti,omap4-i2c";
#address-cells =
<1>;
#size-cells =
<0>;
ti,hwmods =
"i2c1";
reg = <0x44e0b000
0x1000>;
interrupts =
<70>;
status =
"disabled";
};
è¦å¨è¿ä¸ªèç¹ä¸æä¸è¥¿ï¼å¯ä»¥ç´æ¥å¨am33xx.dtsiä¸æï¼å¯ä»¥åæè¿æ ·ï¼
i2c0: i2c@44e0b000
{
compatible =
"ti,omap4-i2c";
#address-cells =
<1>;
#size-cells =
<0>;
ti,hwmods =
"i2c1";
reg = <0x44e0b000
0x1000>;
interrupts =
<70>;
status =
"okay";
tlv320aic3x: tlv320aic3x@18 {
compatible = "ti,tlv320aic3x";
reg = <0x18>;
status = "okay";
AVDD-supply = <&ldo4_reg>;
IOVDD-supply = <&ldo4_reg>;
DRVDD-supply = <&ldo4_reg>;
DVDD-supply = <&ldo4_reg>;
};
};
å
¶ä¸compatibleå串âti,tlv320aic3xâæ¯å¨Documentation/devicetree/bindingséé¢å
¨ææç´¢âtlv320aicâè·å¾çï¼âtlv320aic3x:
tlv320aic3x@18âéµå¾ªçæ¯âæ è¯ç¬¦:å称@å°åâçæ ¼å¼ï¼åé¢çâi2c0:
i2c@44e0b000âä¹æ¯è¿ä¸ªæ ¼å¼ãè¿éçæ è¯ç¬¦å¯ä»¥å¨å
å«è¿ä¸ªæ件çæ件æè¿ä¸ªæ件çå
¶ä»ä½ç½®å¼ç¨ï¼å æ¤ï¼å¯ä»¥ä½¿ç¨arch/arm/boot/dts/am335x-boneblack.dtså
å«arch/arm/boot/dts/am33xx.dtsiï¼ç¶åå¨am335x-boneblack.dtséåï¼
&i2c0 {
status = "okay";
tlv320aic3x: tlv320aic3x@18 {
compatible = "ti,tlv320aic3x";
reg = <0x18>;
status = "okay";
AVDD-supply = <&ldo4_reg>;
IOVDD-supply = <&ldo4_reg>;
DRVDD-supply = <&ldo4_reg>;
DVDD-supply = <&ldo4_reg>;
};
};
&i2c0表示å¼ç¨äºi2c0è¿ä¸ªæ è¯ç¬¦ï¼ç¶åææ¬å·éçå
容æè½½å°æ è¯ç¬¦ä¸ï¼å¦æå±æ§çååç¸åï¼ä¾å¦statusåºç°ä¸¤æ¬¡ï¼åé¢æ¯âdisabledâåé¢æ¯âokayâï¼ä»¥åé¢ç为åï¼å¼ç¨æ è¯ç¬¦ç次æ°ä¸åéå¶ã
ä¹è®¸ä¸å¼å§ä¼è§å¾FDTçå·¥ä½è¿ç¨å¾ç¥ç§ï¼ä½ä½ åªè¦ç¨compatibleçå串å»å
¨ææç´¢ä¸ä¸Cæ件ï¼ç¶åä»ç»é
读ä¸ä¸ï¼å°±ä¼åç°å¾ç®åï¼æ²¡è¿å åéä½ å°±å¯ä»¥èªå®ä¹FDTèç¹çå±æ§äºãååæ¯è¿äºæä½è¿ç¨æ没æ¾å°ä»ä¹æ档说ï¼æ¯è¾å¤´çï¼æ以ææè¿äºååºæ¥ï¼å¸æè½ç»å¤§å®¶å¸®å©ã
ä¸é¢è¯´è¯´initrdï¼initrdçç¨å¤æ¯ç»å
æ ¸ä¸ä¸ªåå§çåºæ¬æ件系ç»ï¼ç¨æ¥å è½½å
æ ¸æ¨¡åä¹ç±»çä¸è¥¿ãå¾å¤äººè§å¾åµå
¥å¼ç³»ç»ä¸éè¦initrdï¼ä¹å¯ä»¥æinitrdä½ä¸ºæç»çæ ¹æ件系ç»ãæç¨initrdæ¯ç¨æ¥æ ¡éªçæ£çæ ¹æ件系ç»ï¼å 为å¨åµå
¥å¼è®¾å¤ä¸ï¼æ æ³é¢æµç¨æ·å°åºä»ä¹æ¶åå
³æºï¼å¯è½ä¼é ææ件系ç»é®é¢ã
initrdå¯ä»¥ç¨buildrootï¼åå¶ä½æ£å¸¸æ件系ç»ä¸æ ·åï¼æåææ ¹ä¸çlinuxrcæ¢æä¸ä¸ªä¾å¦ä¸é¢è¿æ ·çæ件ï¼
#!/bin/sh
/bin/echo Now Check SD Card
/sbin/fsck.ext4 /dev/mmcblk0p5
è½ç¶Documentation/initrd.txtéé¢è¯´ï¼å
æ ¸ä¼æ§è¡initrdéé¢ç/sbin/initï¼ä½å¨æç¨çlinux-3.8.13ä¸ï¼init/do_mounts_initrd.céé¢ï¼æ§è¡çæ¯/linuxrcï¼ä¸ç¥éæ¯ä¸æ¯æ档没ææ´æ°è¿æ¥ãå
·ä½çè°ç¨é¡ºåºæ¯ï¼kernel_initï¼init/main.cï¼
> kernel_init_freeableï¼init/main.cï¼
> prepare_namespaceï¼init/do_mounts.cï¼
> initrd_loadï¼init/do_mounts_initrd.cï¼ > handle_initrd
ï¼init/do_mounts_initrd.cï¼ã
å¨ä½¿ç¨initrdçæ¶åæå ç¹éè¦æ³¨æçï¼
ä¸å»ºè®®å¨initrdä¸æè½½å«çä¸è¥¿ï¼ä¼å¼èµ·æªç¥çé®é¢ï¼è²ä¼¼çå°ä¸ªæç« è¯´è¿ä¸ªï¼æ¾ä¸å°äº
å 为ä¸é¢çè¿æ¡ï¼èä¸å¨initrdçæ¶åï¼å
æ ¸è¿æ²¡ææè½½devtmpfsï¼å æ¤å»ºè®®ä½¿ç¨éæ设å¤èç¹ï¼ä»¥AM335x为ä¾ï¼å
æ ¸åæ°console=/dev/ttyO0,115200n8ï¼ï¼å¿
é¡»çèç¹æï¼
/dev/null
/dev/console
/dev/ttyO0
è¿äºèç¹å¯ä»¥ç¨fakerootä¹åmknodå¨buildrootçoutput/target/devéå建ï¼é¤äº/dev/consoleï¼buildrootä¼èªå·±å建ï¼å
¶ä»ä¹å¯ä»¥åå°buildrootçsystem/device_table.txtéé¢è®©buildrootèªå¨å建ï¼
#
/dev/null
c 666 0 0
1 3
-
-
-
/dev/ttyO0 c 600
0 0 250
0
-
-
-
å¦æä½ ç¨çæ¯Atmelçå¤çå¨ï¼ä¸é¢çttyO0å¯è½æ¯ttyS0ï¼å¦ææ¯ä¸æçï¼å¯è½æ¯ttySAC0ï¼èä¸majoråminorä¹ä¼ä¸ä¸æ ·ï¼è¯·èªè¡è§£å³ãå¦æä½ åæä¸æ ·è¦æ£éªSDå¡ï¼é£å°±è¿å¿
é¡»å ä¸SDå¡çååºå¯¹åºçèç¹ã
/linuxrcå¯ä»¥æ¯ä¸ªç¨åºä¹å¯ä»¥æ¯ä¸ªèæ¬ï¼èæ¬çè¯ï¼å½ä»¤åç»å¯¹è·¯å¾ï¼èä¸è®°å¾æ/linuxrcçmodeæ¹ä¸º755
使ç¨initrdåªéè¦ç¨u-bootæbuildrootå¶ä½çæ件系ç»æ åæ·è´å°å
åéï¼ç¶åä¼ éinitrd=[å°å],[容é]è¿æ ·çåæ°ç»å
æ ¸ï¼ä¾å¦initrd=0x81300000,8Mï¼æç»çrootåæ°å¯ä»¥ä¸åï¼ä¾å¦root=/dev/mmcblk0p5ï¼è¿è¡¨ç¤ºæç»çrootæ¯SDå¡ä¸æ©å±ååºä¸ç第ä¸ä¸ªé»è¾ååºãç»ä¸¤ä¸ªå
æ ¸åæ°çä¾åï¼
console=ttyO0,115200n8 root=/dev/mmcblk0p5 initrd=0x81300000,8M vram=16M
consoleblank=0
console=ttyO0,115200n8 initrd=0x81300000,8M root=/dev/nfs rw
nfsroot=192.168.5.226:/home/cdu/nfsroot
ip=192.168.5.222:192.168.5.226:192.168.5.1:255.255.255.0:core335x:eth0:off
vram=16M consoleblank=0
第ä¸ä¸ªä¸è§£éäºï¼ç¬¬äºä¸ªè¡¨ç¤ºä½¿ç¨initrdï¼åæ¶ä½¿ç¨nfsrootã
æåå°å¦ä¸å¥ï¼ä½¿ç¨initrdéè¦å¨å
æ ¸é
ç½®éæå¼æ¯æï¼è¿ä¸ªç½ä¸çèµæ太å¤äºï¼æå°±ä¸è¯´å¨åªéäºã
温馨提示:答案为网友推荐,仅供参考