Сборка ядра для Орикса — различия между версиями
Korogodin (обсуждение | вклад) (→Конфигурируем ядро) |
Dneprov D (обсуждение | вклад) (→Лог загрузки различных ядер) |
||
(не показаны 14 промежуточных версий 1 участника) | |||
Строка 88: | Строка 88: | ||
== Собираем Xilinx U-boot == | == Собираем Xilinx U-boot == | ||
− | + | Нам потребуется mkimage, которая входит в пакет сборки u-boot'а. Эта утилита позволяет завернуть файл ядра Image в uIamge, который уже может быть запущен u-boot'ом. | |
Забираем у Xilinx'a: | Забираем у Xilinx'a: | ||
Строка 104: | Строка 104: | ||
В каталоге ./tools появился mkimage, которым мы далее будем пользоваться. | В каталоге ./tools появился mkimage, которым мы далее будем пользоваться. | ||
− | == | + | == Ядро от OSADL == |
Существует замечательная контора [https://www.osadl.org/ OSADL], занимающаяся тестированием PREEMPT_RT патча на различных сборках и архитектурах. [https://www.osadl.org/Profile-of-system-in-rack-b-slot-8.qa-profile-rbs8.0.html Они протестировали] ядро 3.12.24 с PREEMPT_RT патчем на ZedBoard. Более того, они предоставляют удобные скрипты, которые сами скачивают все нужные ядра (доступен по ссылке внизу страницы, [[media:ODASL_sct.tar|копия]]). | Существует замечательная контора [https://www.osadl.org/ OSADL], занимающаяся тестированием PREEMPT_RT патча на различных сборках и архитектурах. [https://www.osadl.org/Profile-of-system-in-rack-b-slot-8.qa-profile-rbs8.0.html Они протестировали] ядро 3.12.24 с PREEMPT_RT патчем на ZedBoard. Более того, они предоставляют удобные скрипты, которые сами скачивают все нужные ядра (доступен по ссылке внизу страницы, [[media:ODASL_sct.tar|копия]]). | ||
Строка 3108: | Строка 3108: | ||
|hidden = 1 | |hidden = 1 | ||
}} | }} | ||
− | |||
=== Скачиваем ядро, патчи, патчим ядро === | === Скачиваем ядро, патчи, патчим ядро === | ||
Строка 3196: | Строка 3195: | ||
</source> | </source> | ||
− | Вносим желаемые изменения в .config файл, компилируем...и это ядро не запускается на Ориксе | + | Вносим желаемые изменения в .config файл, компилируем...и это ядро не запускается на Ориксе. |
− | + | ||
== Пара слов о Device Tree == | == Пара слов о Device Tree == | ||
Строка 3203: | Строка 3201: | ||
На PLDA'шных модулях можно найти скомпилированный Device Tree Blob файл. Он легко переводится в читаемый DTS вид: | На PLDA'шных модулях можно найти скомпилированный Device Tree Blob файл. Он легко переводится в читаемый DTS вид: | ||
<source lang="bash"> | <source lang="bash"> | ||
− | + | /dtc$ ./dtc -I dtb -O dts -o somz.dts somz.dtb | |
</source> | </source> | ||
+ | |||
+ | Утилита dtc доступна в виде исходников в Xilinix'овском гитхабе. Для компиляции потребовалось установить в систему bison и flex. | ||
Получаем: | Получаем: | ||
− | <source lang=" | + | {{Hider|title = DTS-файл от PLDA |
+ | |content = <source lang="C"> | ||
/dts-v1/; | /dts-v1/; | ||
Строка 3584: | Строка 3585: | ||
}; | }; | ||
</source> | </source> | ||
+ | |hidden = 1 | ||
+ | }} | ||
+ | |||
+ | |||
+ | {{Hider|title = DTS-файл от PLDA во второй партии модулей (ядро Linux-3.12.0-somz Wed Jul 9 10:55:30 2014) | ||
+ | |content = <source lang="C"> | ||
+ | /dts-v1/; | ||
+ | |||
+ | / { | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x1>; | ||
+ | compatible = "xlnx,zynq-7000"; | ||
+ | model = "Xilinx Zynq"; | ||
+ | |||
+ | aliases { | ||
+ | ethernet0 = "/amba@0/ps7-ethernet@e000b000"; | ||
+ | i2c0 = "/amba@0/ps7-i2c@e0004000"; | ||
+ | i2c1 = "/amba@0/i2c@41600000"; | ||
+ | serial0 = "/amba@0/serial@e0000000"; | ||
+ | spi0 = "/amba@0/ps7-qspi@e000d000"; | ||
+ | }; | ||
+ | |||
+ | chosen { | ||
+ | bootargs = "console=ttyPS0,115200"; | ||
+ | linux,stdout-path = "/amba@0/serial@e0000000"; | ||
+ | }; | ||
+ | |||
+ | cpus { | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x0>; | ||
+ | |||
+ | cpu@0 { | ||
+ | bus-handle = <0x1>; | ||
+ | compatible = "arm,cortex-a9"; | ||
+ | d-cache-line-size = <0x20>; | ||
+ | d-cache-size = <0x8000>; | ||
+ | device_type = "cpu"; | ||
+ | i-cache-line-size = <0x20>; | ||
+ | i-cache-size = <0x8000>; | ||
+ | interrupt-handle = <0x2>; | ||
+ | reg = <0x0>; | ||
+ | }; | ||
+ | |||
+ | cpu@1 { | ||
+ | bus-handle = <0x1>; | ||
+ | compatible = "arm,cortex-a9"; | ||
+ | d-cache-line-size = <0x20>; | ||
+ | d-cache-size = <0x8000>; | ||
+ | device_type = "cpu"; | ||
+ | i-cache-line-size = <0x20>; | ||
+ | i-cache-size = <0x8000>; | ||
+ | interrupt-handle = <0x2>; | ||
+ | reg = <0x1>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | pmu { | ||
+ | compatible = "arm,cortex-a9-pmu"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x5 0x4 0x0 0x6 0x4>; | ||
+ | reg = <0xf8891000 0x1000 0xf8893000 0x1000>; | ||
+ | reg-names = "cpu0", "cpu1"; | ||
+ | }; | ||
+ | |||
+ | memory@0 { | ||
+ | device_type = "memory"; | ||
+ | reg = <0x0 0x40000000>; | ||
+ | }; | ||
+ | |||
+ | amba@0 { | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x1>; | ||
+ | compatible = "xlnx,ps7-axi-interconnect-1.00.a", "simple-bus"; | ||
+ | ranges; | ||
+ | linux,phandle = <0x1>; | ||
+ | phandle = <0x1>; | ||
+ | |||
+ | axi-ext-slave-conn@63e00000 { | ||
+ | compatible = "xlnx,axi-ext-slave-conn-1.00.a"; | ||
+ | reg = <0x63e00000 0x10000>; | ||
+ | xlnx,s-axi-aruser-width = <0x1>; | ||
+ | xlnx,s-axi-awuser-width = <0x1>; | ||
+ | xlnx,s-axi-buser-width = <0x1>; | ||
+ | xlnx,s-axi-id-width = <0x1>; | ||
+ | xlnx,s-axi-num-addr-ranges = <0x1>; | ||
+ | xlnx,s-axi-num-mem-addr-ranges = <0x0>; | ||
+ | xlnx,s-axi-ruser-width = <0x1>; | ||
+ | xlnx,s-axi-supports-read = <0x1>; | ||
+ | xlnx,s-axi-supports-user-signals = <0x0>; | ||
+ | xlnx,s-axi-supports-write = <0x1>; | ||
+ | xlnx,s-axi-wuser-width = <0x1>; | ||
+ | xlnx,use-advanced-ports = <0x0>; | ||
+ | }; | ||
+ | |||
+ | logicvc@7fa00000 { | ||
+ | compatible = "xylon,logicvc-3.02.a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x3a 0x4>; | ||
+ | reg = <0x7fa00000 0x10000>; | ||
+ | xlnx,buffer-0-offset = <0x438>; | ||
+ | xlnx,buffer-1-offset = <0x400>; | ||
+ | xlnx,buffer-2-offset = <0x400>; | ||
+ | xlnx,buffer-3-offset = <0x400>; | ||
+ | xlnx,buffer-4-offset = <0x400>; | ||
+ | xlnx,display-color-space = <0x1>; | ||
+ | xlnx,display-interface = <0x0>; | ||
+ | xlnx,dvi-clk-mode = <0x0>; | ||
+ | xlnx,e-data-width = <0x18>; | ||
+ | xlnx,e-layer = <0x0>; | ||
+ | xlnx,increase-fifo = <0x1>; | ||
+ | xlnx,ip-license-check = <0x1>; | ||
+ | xlnx,ip-license-type = <0x1>; | ||
+ | xlnx,ip-major-revision = <0x3>; | ||
+ | xlnx,ip-minor-revision = <0x2>; | ||
+ | xlnx,ip-patch-level = <0x0>; | ||
+ | xlnx,ip-time-before-break = <0x1>; | ||
+ | xlnx,layer-0-alpha-mode = <0x0>; | ||
+ | xlnx,layer-0-data-width = <0x18>; | ||
+ | xlnx,layer-0-offset = <0x0>; | ||
+ | xlnx,layer-0-type = <0x0>; | ||
+ | xlnx,layer-1-alpha-mode = <0x0>; | ||
+ | xlnx,layer-1-data-width = <0x10>; | ||
+ | xlnx,layer-1-offset = <0x800>; | ||
+ | xlnx,layer-1-type = <0x0>; | ||
+ | xlnx,layer-2-alpha-mode = <0x0>; | ||
+ | xlnx,layer-2-data-width = <0x10>; | ||
+ | xlnx,layer-2-offset = <0x1000>; | ||
+ | xlnx,layer-2-type = <0x0>; | ||
+ | xlnx,layer-3-alpha-mode = <0x0>; | ||
+ | xlnx,layer-3-data-width = <0x10>; | ||
+ | xlnx,layer-3-offset = <0x1800>; | ||
+ | xlnx,layer-3-type = <0x0>; | ||
+ | xlnx,layer-4-alpha-mode = <0x0>; | ||
+ | xlnx,layer-4-data-width = <0x10>; | ||
+ | xlnx,layer-4-offset = <0x2000>; | ||
+ | xlnx,layer-4-type = <0x0>; | ||
+ | xlnx,lvds-data-width = <0x4>; | ||
+ | xlnx,mem-burst = <0x4>; | ||
+ | xlnx,mem-byte-swap = <0x0>; | ||
+ | xlnx,mem-little-endian = <0x1>; | ||
+ | xlnx,mplb-awidth = <0x20>; | ||
+ | xlnx,mplb-dwidth = <0x40>; | ||
+ | xlnx,mplb-native-dwidth = <0x20>; | ||
+ | xlnx,mplb-num-masters = <0x8>; | ||
+ | xlnx,mplb-p2p = <0x0>; | ||
+ | xlnx,mplb-priority = <0x3>; | ||
+ | xlnx,mplb-smallest-slave = <0x20>; | ||
+ | xlnx,mplb-support-bursts = <0x1>; | ||
+ | xlnx,num-of-layers = <0x1>; | ||
+ | xlnx,pixel-data-width = <0x10>; | ||
+ | xlnx,readable-regs = <0x1>; | ||
+ | xlnx,reg-byte-swap = <0x0>; | ||
+ | xlnx,regs-interface = <0x2>; | ||
+ | xlnx,row-stride = <0x800>; | ||
+ | xlnx,use-background = <0x0>; | ||
+ | xlnx,use-e-parallel-input = <0x0>; | ||
+ | xlnx,use-e-vclk-bufgmux = <0x1>; | ||
+ | xlnx,use-multiplier = <0x2>; | ||
+ | xlnx,use-size-position = <0x1>; | ||
+ | xlnx,use-vclk2 = <0x1>; | ||
+ | xlnx,use-xtreme-dsp = <0x2>; | ||
+ | xlnx,vclk-period = <0x61a8>; | ||
+ | xlnx,vmem-baseaddr = <0x1c000000>; | ||
+ | xlnx,vmem-highaddr = <0x1dffffff>; | ||
+ | xlnx,vmem-interface = <0x2>; | ||
+ | xlnx,xcolor = <0x0>; | ||
+ | xlnx,xmb-data-bus-width = <0x40>; | ||
+ | pixel-clock-source = <0x3>; | ||
+ | pixel-data-invert = <0x0>; | ||
+ | pixel-clock-active-high = <0x1>; | ||
+ | pixel-component-format = "ARGB"; | ||
+ | pixel-component-layer = <0x0 0x1 0x2>; | ||
+ | active-layer = <0x0>; | ||
+ | videomode = "1920x1080"; | ||
+ | linux,phandle = <0x5>; | ||
+ | phandle = <0x5>; | ||
+ | |||
+ | edid { | ||
+ | preffered-videomode = <0x1>; | ||
+ | display-data = <0x0>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | xylon-video-params { | ||
+ | |||
+ | 1920x1080 { | ||
+ | refresh = <0x3c>; | ||
+ | xres = <0x780>; | ||
+ | yres = <0x438>; | ||
+ | pixclock-khz = <0x24414>; | ||
+ | left-margin = <0x94>; | ||
+ | right-margin = <0x58>; | ||
+ | upper-margin = <0x24>; | ||
+ | lower-margin = <0x4>; | ||
+ | hsync-len = <0x2c>; | ||
+ | vsync-len = <0x5>; | ||
+ | sync = <0x0>; | ||
+ | vmode = <0x0>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | i2c@41600000 { | ||
+ | compatible = "xlnx,axi-iic-1.02.a", "xlnx,xps-iic-2.00.a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x37 0x4>; | ||
+ | reg = <0x41600000 0x10000>; | ||
+ | xlnx,gpo-width = <0x1>; | ||
+ | xlnx,iic-freq = <0x186a0>; | ||
+ | xlnx,instance = "i2c_eeprom"; | ||
+ | xlnx,scl-inertial-delay = <0x0>; | ||
+ | xlnx,sda-inertial-delay = <0x0>; | ||
+ | xlnx,sda-level = <0x1>; | ||
+ | xlnx,ten-bit-adr = <0x0>; | ||
+ | }; | ||
+ | |||
+ | ps7-afi@f8008000 { | ||
+ | compatible = "xlnx,ps7-afi-1.00.a"; | ||
+ | reg = <0xf8008000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-afi@f8009000 { | ||
+ | compatible = "xlnx,ps7-afi-1.00.a"; | ||
+ | reg = <0xf8009000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-afi@f800a000 { | ||
+ | compatible = "xlnx,ps7-afi-1.00.a"; | ||
+ | reg = <0xf800a000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-afi@f800b000 { | ||
+ | compatible = "xlnx,ps7-afi-1.00.a"; | ||
+ | reg = <0xf800b000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-ddrc@f8006000 { | ||
+ | compatible = "xlnx,ps7-ddrc-1.00.a", "xlnx,ps7-ddrc"; | ||
+ | reg = <0xf8006000 0x1000>; | ||
+ | xlnx,has-ecc = <0x0>; | ||
+ | }; | ||
+ | |||
+ | ps7-dev-cfg@f8007000 { | ||
+ | clock-names = "ref_clk", "fclk0", "fclk1", "fclk2", "fclk3"; | ||
+ | clocks = <0x3 0xc 0x3 0xf 0x3 0x10 0x3 0x11 0x3 0x12>; | ||
+ | compatible = "xlnx,ps7-dev-cfg-1.00.a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x8 0x4>; | ||
+ | reg = <0xf8007000 0x100>; | ||
+ | }; | ||
+ | |||
+ | ps7-dma@f8003000 { | ||
+ | #dma-cells = <0x1>; | ||
+ | #dma-channels = <0x8>; | ||
+ | #dma-requests = <0x4>; | ||
+ | clock-names = "apb_pclk"; | ||
+ | clocks = <0x3 0x1b>; | ||
+ | compatible = "xlnx,ps7-dma-1.00.a", "arm,primecell", "arm,pl330"; | ||
+ | interrupt-names = "abort", "dma0", "dma1", "dma2", "dma3", "dma4", "dma5", "dma6", "dma7"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0xd 0x4 0x0 0xe 0x4 0x0 0xf 0x4 0x0 0x10 0x4 0x0 0x11 0x4 0x0 0x28 0x4 0x0 0x29 0x4 0x0 0x2a 0x4 0x0 0x2b 0x4>; | ||
+ | reg = <0xf8003000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-ethernet@e000b000 { | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x0>; | ||
+ | clock-names = "ref_clk", "aper_clk"; | ||
+ | clocks = <0x3 0xd 0x3 0x1e>; | ||
+ | compatible = "xlnx,ps7-ethernet-1.00.a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x16 0x4>; | ||
+ | local-mac-address = [00 0a 35 00 00 00]; | ||
+ | phy-handle = <0x4>; | ||
+ | phy-mode = "rgmii-id"; | ||
+ | reg = <0xe000b000 0x1000>; | ||
+ | xlnx,eth-mode = <0x1>; | ||
+ | xlnx,has-mdio = <0x1>; | ||
+ | xlnx,ptp-enet-clock = <0x69f6bcb>; | ||
+ | |||
+ | mdio { | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x0>; | ||
+ | |||
+ | phy@1 { | ||
+ | compatible = "micrel,ksz9021"; | ||
+ | device_type = "ethernet-phy"; | ||
+ | reg = <0x1>; | ||
+ | rxc-skew-ps = <0xbb8>; | ||
+ | rxdv-skew-ps = <0x0>; | ||
+ | txc-skew-ps = <0xbb8>; | ||
+ | txen-skew-ps = <0x0>; | ||
+ | rxd3-skew-ps = <0x0>; | ||
+ | rxd2-skew-ps = <0x0>; | ||
+ | rxd1-skew-ps = <0x0>; | ||
+ | rxd0-skew-ps = <0x0>; | ||
+ | linux,phandle = <0x4>; | ||
+ | phandle = <0x4>; | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | ps7-gpio@e000a000 { | ||
+ | #gpio-cells = <0x2>; | ||
+ | clocks = <0x3 0x2a>; | ||
+ | compatible = "xlnx,ps7-gpio-1.00.a"; | ||
+ | emio-gpio-width = <0x40>; | ||
+ | gpio-controller; | ||
+ | gpio-mask-high = <0x3c000>; | ||
+ | gpio-mask-low = <0xf200>; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x14 0x4>; | ||
+ | reg = <0xe000a000 0x1000>; | ||
+ | linux,phandle = <0x6>; | ||
+ | phandle = <0x6>; | ||
+ | }; | ||
+ | |||
+ | ps7-i2c@e0004000 { | ||
+ | bus-id = <0x0>; | ||
+ | clocks = <0x3 0x26>; | ||
+ | compatible = "xlnx,ps7-i2c-1.00.a"; | ||
+ | i2c-clk = <0x61a80>; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x19 0x4>; | ||
+ | reg = <0xe0004000 0x1000>; | ||
+ | xlnx,has-interrupt = <0x0>; | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x0>; | ||
+ | |||
+ | i2c_hdmi@39 { | ||
+ | compatible = "adv7511"; | ||
+ | reg = <0x39>; | ||
+ | interrupts = <0x0 0x36 0x4>; | ||
+ | interrupt-parent = <0x2>; | ||
+ | dma-request = <0x5>; | ||
+ | edid-addr = <0x50>; | ||
+ | }; | ||
+ | |||
+ | i2c_usrclk@55 { | ||
+ | compatible = "si570"; | ||
+ | reg = <0x55>; | ||
+ | factory-fout = <0x989680>; | ||
+ | initial-fout = <0x8d9ee20>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | ps7-iop-bus-config@e0200000 { | ||
+ | compatible = "xlnx,ps7-iop-bus-config-1.00.a"; | ||
+ | reg = <0xe0200000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-ocmc@f800c000 { | ||
+ | compatible = "xlnx,ps7-ocmc-1.00.a", "xlnx,zynq-ocm-1.0"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x3 0x4>; | ||
+ | reg = <0xf800c000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-pl310@f8f02000 { | ||
+ | arm,data-latency = <0x3 0x2 0x2>; | ||
+ | arm,tag-latency = <0x2 0x2 0x2>; | ||
+ | cache-level = <0x2>; | ||
+ | cache-unified; | ||
+ | compatible = "xlnx,ps7-pl310-1.00.a", "arm,pl310-cache"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x2 0x4>; | ||
+ | reg = <0xf8f02000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | ps7-qspi@e000d000 { | ||
+ | clock-names = "ref_clk", "aper_clk"; | ||
+ | clocks = <0x3 0xa 0x3 0x2b>; | ||
+ | compatible = "xlnx,ps7-qspi-1.00.a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x13 0x4>; | ||
+ | is-dual = <0x0>; | ||
+ | num-chip-select = <0x1>; | ||
+ | reg = <0xe000d000 0x1000>; | ||
+ | xlnx,fb-clk = <0x1>; | ||
+ | xlnx,qspi-mode = <0x0>; | ||
+ | }; | ||
+ | |||
+ | ps7-qspi-linear@fc000000 { | ||
+ | clock-names = "ref_clk", "aper_clk"; | ||
+ | clocks = <0x3 0xa 0x3 0x2b>; | ||
+ | compatible = "xlnx,ps7-qspi-linear-1.00.a"; | ||
+ | reg = <0xfc000000 0x1000000>; | ||
+ | }; | ||
+ | |||
+ | ps7-scugic@f8f01000 { | ||
+ | #address-cells = <0x2>; | ||
+ | #interrupt-cells = <0x3>; | ||
+ | #size-cells = <0x1>; | ||
+ | compatible = "xlnx,ps7-scugic-1.00.a", "arm,cortex-a9-gic", "arm,gic"; | ||
+ | interrupt-controller; | ||
+ | num_cpus = <0x2>; | ||
+ | num_interrupts = <0x60>; | ||
+ | reg = <0xf8f01000 0x1000 0xf8f00100 0x100>; | ||
+ | linux,phandle = <0x2>; | ||
+ | phandle = <0x2>; | ||
+ | }; | ||
+ | |||
+ | ps7-scutimer@f8f00600 { | ||
+ | clocks = <0x3 0x4>; | ||
+ | compatible = "xlnx,ps7-scutimer-1.00.a", "arm,cortex-a9-twd-timer"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x1 0xd 0x301>; | ||
+ | reg = <0xf8f00600 0x20>; | ||
+ | }; | ||
+ | |||
+ | ps7-scuwdt@f8f00620 { | ||
+ | clocks = <0x3 0x4>; | ||
+ | compatible = "xlnx,ps7-scuwdt-1.00.a"; | ||
+ | device_type = "watchdog"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x1 0xe 0x301>; | ||
+ | reg = <0xf8f00620 0xe0>; | ||
+ | }; | ||
+ | |||
+ | ps7-sdio@e0100000 { | ||
+ | clock-frequency = <0x2faf080>; | ||
+ | clock-names = "clk_xin", "clk_ahb"; | ||
+ | clocks = <0x3 0x15 0x3 0x20>; | ||
+ | compatible = "xlnx,ps7-sdio-1.00.a", "generic-sdhci", "arasan,sdhci-8.9a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x18 0x4>; | ||
+ | reg = <0xe0100000 0x1000>; | ||
+ | xlnx,has-cd = <0x1>; | ||
+ | xlnx,has-power = <0x0>; | ||
+ | xlnx,has-wp = <0x0>; | ||
+ | }; | ||
+ | |||
+ | ps7-slcr@f8000000 { | ||
+ | compatible = "xlnx,ps7-slcr-1.00.a", "xlnx,zynq-slcr"; | ||
+ | reg = <0xf8000000 0x1000>; | ||
+ | |||
+ | clocks { | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x0>; | ||
+ | |||
+ | clkc { | ||
+ | #clock-cells = <0x1>; | ||
+ | clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x", "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x", "dci", "lqspi", "smc", "pcap", "gem0", "gem1", "fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1", "sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1", "dma", "usb0_aper", "usb1_aper", "gem0_aper", "gem1_aper", "sdio0_aper", "sdio1_aper", "spi0_aper", "spi1_aper", "can0_aper", "can1_aper", "i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper", "gpio_aper", "lqspi_aper", "smc_aper", "swdt", "dbg_trc", "dbg_apb"; | ||
+ | compatible = "xlnx,ps7-clkc"; | ||
+ | fclk-enable = <0xf>; | ||
+ | ps-clk-frequency = <0x1fca055>; | ||
+ | linux,phandle = <0x3>; | ||
+ | phandle = <0x3>; | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | ps7-ttc@f8001000 { | ||
+ | clocks = <0x3 0x6>; | ||
+ | compatible = "xlnx,ps7-ttc-1.00.a", "cdns,ttc"; | ||
+ | interrupt-names = "ttc0", "ttc1", "ttc2"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0xa 0x4 0x0 0xb 0x4 0x0 0xc 0x4>; | ||
+ | reg = <0xf8001000 0x1000>; | ||
+ | }; | ||
+ | |||
+ | serial@e0000000 { | ||
+ | clock-names = "ref_clk", "aper_clk"; | ||
+ | clocks = <0x3 0x17 0x3 0x28>; | ||
+ | compatible = "xlnx,ps7-uart-1.00.a", "xlnx,xuartps"; | ||
+ | current-speed = <0x1c200>; | ||
+ | device_type = "serial"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x1b 0x4>; | ||
+ | port-number = <0x0>; | ||
+ | reg = <0xe0000000 0x1000>; | ||
+ | xlnx,has-modem = <0x0>; | ||
+ | }; | ||
+ | |||
+ | ps7-usb@e0002000 { | ||
+ | clocks = <0x3 0x1c>; | ||
+ | compatible = "xlnx,ps7-usb-1.00.a"; | ||
+ | dr_mode = "host"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x15 0x4>; | ||
+ | phy_type = "ulpi"; | ||
+ | reg = <0xe0002000 0x1000>; | ||
+ | usb-reset = <0x6 0x7 0x0>; | ||
+ | }; | ||
+ | |||
+ | ps7-wdt@f8005000 { | ||
+ | clocks = <0x3 0x2d>; | ||
+ | compatible = "xlnx,ps7-wdt-1.00.a"; | ||
+ | device_type = "watchdog"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x9 0x1>; | ||
+ | reg = <0xf8005000 0x1000>; | ||
+ | reset = <0x0>; | ||
+ | timeout = <0xa>; | ||
+ | }; | ||
+ | |||
+ | ps7-xadc@f8007100 { | ||
+ | clocks = <0x3 0xc>; | ||
+ | compatible = "xlnx,ps7-xadc-1.00.a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x7 0x4>; | ||
+ | reg = <0xf8007100 0x20>; | ||
+ | }; | ||
+ | |||
+ | sfilter-top@77800000 { | ||
+ | compatible = "xlnx,sfilter-top-1.08.a"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x3b 0x4>; | ||
+ | reg = <0x77800000 0x10000>; | ||
+ | xlnx,input-stream-protocol = "GENERIC"; | ||
+ | xlnx,output-stream-protocol = "GENERIC"; | ||
+ | xlnx,s-axi-control-bus-addr-width = <0x5>; | ||
+ | xlnx,s-axi-control-bus-data-width = <0x20>; | ||
+ | xlnx,s-axi-control-bus-protocol = "AXI4LITE"; | ||
+ | }; | ||
+ | |||
+ | axivdma@43000000 { | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x1>; | ||
+ | compatible = "xlnx,axi-vdma"; | ||
+ | ranges = <0x43000000 0x43000000 0x10000>; | ||
+ | reg = <0x43000000 0x10000>; | ||
+ | xlnx,flush-fsync = <0x1>; | ||
+ | xlnx,num-fstores = <0x1>; | ||
+ | |||
+ | dma-channel@43000000 { | ||
+ | compatible = "xlnx,axi-vdma-mm2s-channel"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x39 0x4>; | ||
+ | xlnx,datawidth = <0x20>; | ||
+ | xlnx,device-id = <0x0>; | ||
+ | xlnx,genlock-mode = <0x1>; | ||
+ | }; | ||
+ | |||
+ | dma-channel@43000030 { | ||
+ | compatible = "xlnx,axi-vdma-s2mm-channel"; | ||
+ | interrupt-parent = <0x2>; | ||
+ | interrupts = <0x0 0x38 0x4>; | ||
+ | xlnx,datawidth = <0x20>; | ||
+ | xlnx,device-id = <0x0>; | ||
+ | xlnx,genlock-mode = <0x0>; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | axi-xadc@43200000 { | ||
+ | compatible = "xlnx,axi-xadc-1.00.a"; | ||
+ | reg = <0x43200000 0x10000>; | ||
+ | xlnx,has-temp-bus = <0x1>; | ||
+ | xlnx,include-intr = <0x0>; | ||
+ | xlnx,instance = "xadc"; | ||
+ | xlnx,sim-monitor-file = "Sysmon_Design.txt"; | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | </source> | ||
+ | |hidden = 1 | ||
+ | }} | ||
+ | |||
+ | == Лог загрузки различных ядер == | ||
+ | |||
+ | {{Hider|title = Ядро от PLDA | ||
+ | |content = <source lang="bash"> | ||
+ | U-Boot 2013.10-dirty (Jan 28 2014 - 17:52:15) | ||
+ | |||
+ | Memory: ECC disabled | ||
+ | DRAM: 512 MiB | ||
+ | Board: SOMZ-V2.0, PLDA Ltd <http://plda.com> | ||
+ | MMC: zynq_sdhci: 0, zynq_sdhci: 1 | ||
+ | SF: Detected N25Q128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB | ||
+ | *** Warning - bad CRC, using default environment | ||
+ | |||
+ | In: serial | ||
+ | Out: serial | ||
+ | Err: serial | ||
+ | Net: Gem.e000b000 | ||
+ | Hit any key to stop autoboot: 0 | ||
+ | Booting Debian from microSD Card... | ||
+ | Device: zynq_sdhci | ||
+ | Manufacturer ID: 1b | ||
+ | OEM: 534d | ||
+ | Name: 00000 | ||
+ | Tran Speed: 50000000 | ||
+ | Rd Block Len: 512 | ||
+ | SD version 2.0 | ||
+ | High Capacity: Yes | ||
+ | Capacity: 7.3 GiB | ||
+ | Bus Width: 4-bit | ||
+ | reading uImage | ||
+ | 3245080 bytes read in 288 ms (10.7 MiB/s) | ||
+ | reading somz.dtb | ||
+ | 8698 bytes read in 16 ms (530.3 KiB/s) | ||
+ | ## Booting kernel from Legacy Image at 03000000 ... | ||
+ | Image Name: Linux-3.12.0-somz-dirty | ||
+ | Image Type: ARM Linux Kernel Image (uncompressed) | ||
+ | Data Size: 3245016 Bytes = 3.1 MiB | ||
+ | Load Address: 00800000 | ||
+ | Entry Point: 00800000 | ||
+ | Verifying Checksum ... OK | ||
+ | ## Flattened Device Tree blob at 02a00000 | ||
+ | Booting using the fdt blob at 0x2a00000 | ||
+ | Loading Kernel Image ... OK | ||
+ | Loading Device Tree to 0fffa000, end 0ffff1f9 ... OK | ||
+ | |||
+ | Starting kernel ... | ||
+ | |||
+ | console [ttyPS0] enabled, bootconsole disabled | ||
+ | xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to d0866000 | ||
+ | brd: module loaded | ||
+ | loop: module loaded | ||
+ | xqspips e000d000.ps7-qspi: master is unqueued, this is deprecated | ||
+ | xqspips e000d000.ps7-qspi: at 0xE000D000 mapped to 0xD0868000, irq=51 | ||
+ | e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k | ||
+ | e1000e: Copyright(c) 1999 - 2013 Intel Corporation. | ||
+ | libphy: XEMACPS mii bus: probed | ||
+ | xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54 | ||
+ | ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver | ||
+ | ehci-pci: EHCI PCI platform driver | ||
+ | ULPI transceiver vendor/product ID 0x0424/0x0006 | ||
+ | Found SMSC USB331x ULPI transceiver. | ||
+ | ULPI integrity check: passed. | ||
+ | xusbps-ehci xusbps-ehci.0: Xilinx PS USB EHCI Host Controller | ||
+ | xusbps-ehci xusbps-ehci.0: new USB bus registered, assigned bus number 1 | ||
+ | xusbps-ehci xusbps-ehci.0: irq 53, io mem 0x00000000 | ||
+ | xusbps-ehci xusbps-ehci.0: USB 2.0 started, EHCI 1.00 | ||
+ | hub 1-0:1.0: USB hub found | ||
+ | hub 1-0:1.0: 1 port detected | ||
+ | usbcore: registered new interface driver usb-storage | ||
+ | mousedev: PS/2 mouse device common for all mice | ||
+ | i2c /dev entries driver | ||
+ | usbcore: registered new interface driver uvcvideo | ||
+ | USB Video Class driver (1.1.1) | ||
+ | xadcps f8007100.ps7-xadc: enabled: yes reference: external | ||
+ | zynq_wdt f8005000.ps7-wdt: Xilinx Watchdog Timer at d0874000 with timeout 10s | ||
+ | zynq-edac f8006000.ps7-ddrc: ecc not enabled | ||
+ | sdhci: Secure Digital Host Controller Interface driver | ||
+ | sdhci: Copyright(c) Pierre Ossman | ||
+ | sdhci-pltfm: SDHCI platform and OF driver helper | ||
+ | mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA | ||
+ | mmc1: SDHCI controller on e0101000.ps7-sdio [e0101000.ps7-sdio] using ADMA | ||
+ | usbcore: registered new interface driver usbhid | ||
+ | mmc0: new high speed SDHC card at address 0002 | ||
+ | mmcblk0: mmc0:0002 00000 7.32 GiB | ||
+ | mmcblk0: p1 p2 | ||
+ | usbhid: USB HID core driver | ||
+ | TCP: cubic registered | ||
+ | NET: Registered protocol family 17 | ||
+ | Registering SWP/SWPB emulation handler | ||
+ | drivers/rtc/hctosys.c: unable to open rtc device (rtc0) | ||
+ | xvdma xvdma.0: Xilinx VDMA probe successful | ||
+ | xvdma xvdma.0: Devices Scanned 0 | ||
+ | Configuring Ethernet phy KSZ9021 for SOMZ V2.0 | ||
+ | IP-Config: Guessing netmask 255.255.0.0 | ||
+ | IP-Config: Gateway not on directly connected network | ||
+ | EXT4-fs (mmcblk0p2): recovery complete | ||
+ | EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) | ||
+ | VFS: Mounted root (ext4 filesystem) on device 179:2. | ||
+ | devtmpfs: mounted | ||
+ | Freeing unused kernel memory: 172K (c0583000 - c05ae000) | ||
+ | INIT: version 2.88 booting | ||
+ | [info] Using makefile-style concurrent boot in runlevel S. | ||
+ | [....] Starting the hotplug events dispatcher: udevdudevd[627]: starting version 175 | ||
+ | . ok | ||
+ | [ ok ] Synthesizing the initial hotplug events...done. | ||
+ | [ ok ] Waiting for /dev to be fully populated...done. | ||
+ | [ ok ] Activating swap...done. | ||
+ | EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) | ||
+ | [....] Checking root file system...fsck from util-linux 2.20.1 | ||
+ | debian: clean, 22016/131072 files, 248926/524288 blocks | ||
+ | done. | ||
+ | EXT4-fs (mmcblk0p2): re-mounted. Opts: errors=remount-ro | ||
+ | [ ok ] Cleaning up temporary files.... | ||
+ | [ ok ] Activating lvm and md swap...done. | ||
+ | [....] Checking file systems...fsck from util-linux 2.20.1 | ||
+ | done. | ||
+ | [....] Mounting local filesystems...FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck. | ||
+ | done. | ||
+ | [ ok ] Activating swapfile swap...done. | ||
+ | [ ok ] Cleaning up temporary files.... | ||
+ | [ ok ] Setting kernel variables ...done. | ||
+ | [....] Configuring network interfaces...Configuring Ethernet phy KSZ9021 for SOMZ V2.0 | ||
+ | xemacps e000b000.ps7-ethernet: Set clk to 24999999 Hz | ||
+ | xemacps e000b000.ps7-ethernet: link up (100/FULL) | ||
+ | gw: No address associated with name | ||
+ | ifconfig: `--help' gives usage information. | ||
+ | [ ok ] Cleaning up temporary files.... | ||
+ | [ ok ] Setting up X socket directories... /tmp/.X11-unix /tmp/.ICE-unix. | ||
+ | [FAIL] startpar: service(s) returned failure: networking ... failed! | ||
+ | INIT: Entering runlevel: 2 | ||
+ | [info] Using makefile-style concurrent boot in runlevel 2. | ||
+ | Starting Dropbear SSH server: [abort] NO_START is not set to zero in /etc/default/dropbear | ||
+ | NET: Registered protocol family 10 | ||
+ | [ ok ] Starting OpenBSD Secure Shell server: sshd. | ||
+ | Zynq burning... | ||
+ | [FAIL] Starting receiver daemon: receiver[....] receiver daemon failed to start ... failed! | ||
+ | failed! | ||
+ | [FAIL] startpar: service(s) returned failure: receiver ... failed! | ||
+ | |||
+ | Debian GNU/Linux 7 plda ttyPS0 | ||
+ | </source> | ||
+ | |hidden = 1 | ||
+ | }} | ||
+ | |||
+ | {{Hider|title = Ядро от Xilinx 3.18 PREEMPT RT, собранное выше | ||
+ | |content = <source lang="bash"> | ||
+ | U-Boot 2013.10-dirty (Jan 28 2014 - 17:52:15) | ||
+ | |||
+ | Memory: ECC disabled | ||
+ | DRAM: 512 MiB | ||
+ | Board: SOMZ-V2.0, PLDA Ltd <http://plda.com> | ||
+ | MMC: zynq_sdhci: 0, zynq_sdhci: 1 | ||
+ | SF: Detected N25Q128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB | ||
+ | *** Warning - bad CRC, using default environment | ||
+ | |||
+ | In: serial | ||
+ | Out: serial | ||
+ | Err: serial | ||
+ | Net: Gem.e000b000 | ||
+ | Hit any key to stop autoboot: 0 | ||
+ | Booting Debian from microSD Card... | ||
+ | Device: zynq_sdhci | ||
+ | Manufacturer ID: 1b | ||
+ | OEM: 534d | ||
+ | Name: 00000 | ||
+ | Tran Speed: 50000000 | ||
+ | Rd Block Len: 512 | ||
+ | SD version 2.0 | ||
+ | High Capacity: Yes | ||
+ | Capacity: 7.3 GiB | ||
+ | Bus Width: 4-bit | ||
+ | reading uImage | ||
+ | 3503408 bytes read in 309 ms (10.8 MiB/s) | ||
+ | reading somz.dtb | ||
+ | 8698 bytes read in 16 ms (530.3 KiB/s) | ||
+ | ## Booting kernel from Legacy Image at 03000000 ... | ||
+ | Image Name: Linux-3.18.0-rt2-xilinx-06188-gc | ||
+ | Image Type: ARM Linux Kernel Image (uncompressed) | ||
+ | Data Size: 3503344 Bytes = 3.3 MiB | ||
+ | Load Address: 00008000 | ||
+ | Entry Point: 00008000 | ||
+ | Verifying Checksum ... OK | ||
+ | ## Flattened Device Tree blob at 02a00000 | ||
+ | Booting using the fdt blob at 0x2a00000 | ||
+ | Loading Kernel Image ... OK | ||
+ | Loading Device Tree to 0fffa000, end 0ffff1f9 ... OK | ||
+ | |||
+ | Starting kernel ... | ||
+ | </source> | ||
+ | |hidden = 1 | ||
+ | }} | ||
+ | |||
+ | {{Hider|title = Ядро OSADL 3.12.24 PREEMPT RT | ||
+ | |content = <source lang="bash"> | ||
+ | U-Boot 2013.10-dirty (Jan 28 2014 - 17:52:15) | ||
+ | |||
+ | Memory: ECC disabled | ||
+ | DRAM: 512 MiB | ||
+ | Board: SOMZ-V2.0, PLDA Ltd <http://plda.com> | ||
+ | MMC: zynq_sdhci: 0, zynq_sdhci: 1 | ||
+ | SF: Detected N25Q128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB | ||
+ | *** Warning - bad CRC, using default environment | ||
+ | |||
+ | In: serial | ||
+ | Out: serial | ||
+ | Err: serial | ||
+ | Net: Gem.e000b000 | ||
+ | Hit any key to stop autoboot: 0 | ||
+ | Booting Debian from microSD Card... | ||
+ | Device: zynq_sdhci | ||
+ | Manufacturer ID: 1b | ||
+ | OEM: 534d | ||
+ | Name: 00000 | ||
+ | Tran Speed: 50000000 | ||
+ | Rd Block Len: 512 | ||
+ | SD version 2.0 | ||
+ | High Capacity: Yes | ||
+ | Capacity: 7.3 GiB | ||
+ | Bus Width: 4-bit | ||
+ | reading uImage | ||
+ | 3488208 bytes read in 311 ms (10.7 MiB/s) | ||
+ | reading somz.dtb | ||
+ | 8698 bytes read in 16 ms (530.3 KiB/s) | ||
+ | ## Booting kernel from Legacy Image at 03000000 ... | ||
+ | Image Name: Linux-3.12.24-rt38-xilinx | ||
+ | Image Type: ARM Linux Kernel Image (uncompressed) | ||
+ | Data Size: 3488144 Bytes = 3.3 MiB | ||
+ | Load Address: 00008000 | ||
+ | Entry Point: 00008000 | ||
+ | Verifying Checksum ... OK | ||
+ | ## Flattened Device Tree blob at 02a00000 | ||
+ | Booting using the fdt blob at 0x2a00000 | ||
+ | Loading Kernel Image ... OK | ||
+ | Loading Device Tree to 0fffa000, end 0ffff1f9 ... OK | ||
+ | |||
+ | Starting kernel ... | ||
+ | |||
+ | console [ttyPS0] enabled, bootconsole disabled | ||
+ | xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to d0866000 | ||
+ | brd: module loaded | ||
+ | loop: module loaded | ||
+ | hwlat_detector: version 1.0.0 | ||
+ | xqspips e000d000.ps7-qspi: master is unqueued, this is deprecated | ||
+ | xqspips e000d000.ps7-qspi: at 0xE000D000 mapped to 0xD0868000, irq=51 | ||
+ | e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k | ||
+ | e1000e: Copyright(c) 1999 - 2013 Intel Corporation. | ||
+ | libphy: XEMACPS mii bus: probed | ||
+ | xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54 | ||
+ | ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver | ||
+ | ehci-pci: EHCI PCI platform driver | ||
+ | xusbps-dr e0002000.ps7-usb: Unable to init USB phy, missing? | ||
+ | usbcore: registered new interface driver usb-storage | ||
+ | mousedev: PS/2 mouse device common for all mice | ||
+ | i2c /dev entries driver | ||
+ | xadcps f8007100.ps7-xadc: enabled: yes reference: external | ||
+ | zynq_wdt f8005000.ps7-wdt: Xilinx Watchdog Timer at d0870000 with timeout 10s | ||
+ | zynq-edac f8006000.ps7-ddrc: ecc not enabled | ||
+ | sdhci: Secure Digital Host Controller Interface driver | ||
+ | sdhci: Copyright(c) Pierre Ossman | ||
+ | sdhci-pltfm: SDHCI platform and OF driver helper | ||
+ | mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA | ||
+ | mmc1: SDHCI controller on e0101000.ps7-sdio [e0101000.ps7-sdio] using ADMA | ||
+ | usbcore: registered new interface driver usbhid | ||
+ | mmc0: new high speed SDHC card at address 0002 | ||
+ | mmcblk0: mmc0:0002 00000 7.32 GiB | ||
+ | mmcblk0: p1 p2 | ||
+ | usbhid: USB HID core driver | ||
+ | ipip: IPv4 over IPv4 tunneling driver | ||
+ | TCP: cubic registered | ||
+ | NET: Registered protocol family 10 | ||
+ | sit: IPv6 over IPv4 tunneling driver | ||
+ | NET: Registered protocol family 17 | ||
+ | 8021q: 802.1Q VLAN Support v1.8 | ||
+ | NET: Registered protocol family 41 | ||
+ | Registering SWP/SWPB emulation handler | ||
+ | drivers/rtc/hctosys.c: unable to open rtc device (rtc0) | ||
+ | IP-Config: Guessing netmask 255.255.0.0 | ||
+ | IP-Config: Gateway not on directly connected network | ||
+ | EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) | ||
+ | VFS: Mounted root (ext4 filesystem) on device 179:2. | ||
+ | devtmpfs: mounted | ||
+ | Freeing unused kernel memory: 920K (c0682000 - c0768000) | ||
+ | INIT: version 2.88 booting | ||
+ | [info] Using makefile-style concurrent boot in runlevel S. | ||
+ | [....] Starting the hotplug events dispatcher: udevdudevd[743]: starting version 175 | ||
+ | . ok | ||
+ | [ ok ] Synthesizing the initial hotplug events...done. | ||
+ | [ ok ] Waiting for /dev to be fully populated...done. | ||
+ | [ ok ] Activating swap...done. | ||
+ | EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) | ||
+ | [....] Checking root file system...fsck from util-linux 2.20.1 | ||
+ | debian: clean, 22016/131072 files, 248929/524288 blocks | ||
+ | done. | ||
+ | EXT4-fs (mmcblk0p2): re-mounted. Opts: errors=remount-ro | ||
+ | [ ok ] Cleaning up temporary files.... | ||
+ | [ ok ] Activating lvm and md swap...done. | ||
+ | [....] Checking file systems...fsck from util-linux 2.20.1 | ||
+ | done. | ||
+ | [....] Mounting local filesystems...FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck. | ||
+ | done. | ||
+ | [ ok ] Activating swapfile swap...done. | ||
+ | [ ok ] Cleaning up temporary files.... | ||
+ | [ ok ] Setting kernel variables ...done. | ||
+ | xemacps e000b000.ps7-ethernet: Set clk to 24999999 Hz | ||
+ | xemacps e000b000.ps7-ethernet: link up (100/FULL) | ||
+ | [....] Configuring network interfaces...gw: No address associated with name | ||
+ | ifconfig: `--help' gives usage information. | ||
+ | [ ok ] Cleaning up temporary files.... | ||
+ | [ ok ] Setting up X socket directories... /tmp/.X11-unix /tmp/.ICE-unix. | ||
+ | [FAIL] startpar: service(s) returned failure: networking ... failed! | ||
+ | INIT: Entering runlevel: 2 | ||
+ | [info] Using makefile-style concurrent boot in runlevel 2. | ||
+ | Starting Dropbear SSH server: [abort] NO_START is not set to zero in /etc/default/dropbear | ||
+ | xemacps e000b000.ps7-ethernet: Set clk to 24999999 Hz | ||
+ | xemacps e000b000.ps7-ethernet: link up (100/FULL) | ||
+ | [ ok ] Starting OpenBSD Secure Shell server: sshd. | ||
+ | Zynq burning... | ||
+ | [FAIL] Starting receiver daemon: receiver[....] receiver daemon failed to start ... failed! | ||
+ | failed! | ||
+ | [FAIL] startpar: service(s) returned failure: receiver ... failed! | ||
+ | |||
+ | Debian GNU/Linux 7 plda ttyPS0 | ||
+ | </source> | ||
+ | |hidden = 1 | ||
+ | }} | ||
[[Категория:HOWTO]] | [[Категория:HOWTO]] | ||
[[Категория:Oryx]] | [[Категория:Oryx]] | ||
+ | [[Категория:Zynq]] | ||
+ | [[Категория:EmbeddedLinux]] |
Текущая версия на 15:03, 9 ноября 2016
Приведенный мануал справедлив для Kubuntu 14.04 64bit.
Втянуться в тему можно на странице Xilinx Wiki Getting Starting.
Наша цель - собрать новый uImage с применением патча PREEMPT_RT.
Если смотреть на схему, то складывается ощущение, что ядро входит в BOOT.BIN. Но на практике флешка содержит boot.bin, device tree, uImage и образ rootfs. Например, на ZC702:
drwxr-xr-x 3 root root 4096 Jan 1 00:00 .
drwxrwxr-x 19 1000 1000 0 Aug 15 2014 ..
drwxr-xr-x 5 root root 4096 Aug 15 2014 .Trash-1000
-rwxr-xr-x 1 root root 442480 Jun 19 2014 boot.bin
-rwxr-xr-x 1 root root 9219 Jun 3 2014 devicetree.dtb
-rwxr-xr-x 1 root root 3488208 May 30 2001 uImage
-rwxr-xr-x 1 root root 6054766 Aug 15 2014 uramdisk.image.gz
Поэтому простая подмена uImage тоже работает.
[править] Устанавливаем кросскомпилятор
Теоретически этот шаг можно пропустить, воспользовавшись билд-сервером. Но на практике я использовал кросс-компилятор от Xilinx'а.
[править] Скачиваем инсталлер
Страница на Xilinx Wiki: Install Xilinx Tools ведет в раздел Downloads.
На текущий момент самая свежая версия имеет номер 2014.4, поэтому скачиваем Vivado 2014.4 WebInstall for Linux 64.
Потребуется зарегистрироваться на сайте (требует пароль с циферкой ;)).
В результате получаем файл типа Xilinx_Vivado_SDK_2014.4_1119_1_Lin64.bin
[править] Устанавливаем SDK
Устанавливаем SDK и, при желании, Vivado WebKit. Оба инструмента бесплатные:
В начале установки поступит предложение Select Edition to Install, выбираем:
- Vivado Web Pack, если хотим установить Vivado+SDK
- Software Development Kit, если хотим ограничиться SDK
Драйвер для кабеля для компиляции ядра не потребуется, но иметь в системе его полезно.
Директорию установки оставляем по-умолчанию в /opt
После скачивания файлов программа установки предложит получить лицензию на сайте Xilinx, что и следует сделать (Get Free License, далее Xilinx MicroBlaze/All Programmable SoC Software Development Kit - Standalone для SDK или Vivado WebPACK License для Vivado).
[править] Прописываем пути в PATH
По-умолчанию интерпретатор не знает пути до компиляторов. В переменную PATH их умеет добавлять специальный скрипт. Чтобы не вызывать его каждый раз руками, следует добавить строки в ~/.bashrc
:
source /opt/Xilinx/SDK/2014.4/settings64.sh # use settings32.sh on 32-bit operating systems
Переменная CROSS_COMPILE используется в некоторых Makefile'ах ниже. Сейчас с её помощью выбран кросс-компилятор для целевой Linux.
Появились новые возможности:
- можно открыть среду разработки командой xsdk
- можно компилировать прошивку для приемника не на билд-сервере, а на своей машине.
[править] Заставляем работать кросскомпилятор
Самый простой способ убедиться, что кросскомпилятор начал работать - скомпилировать с его помощью прошивку для приемника.
Для этого в personal.conf
изменяем SERVER_BUILD_FIRMWARE
на 0 и добавляем TOOLS, GCC, GPP
:
TOOLS=LC_ALL=POSIX arm-xilinx-linux-gnueabi
GCC=$(TOOLS)-gcc $(CFLAGS)
GPP=$(TOOLS)-g++ $(CFLAGS)
Дале выполняем make
в /src/firmware
, на что получаем невнятное сообщение об отсутствии в системе компилятора arm-xilinx-linux-gnueabi-g++. Дело в том, что для его работы нужен ряд 32-битных библиотек:
После чего кросскомплилятор начинает успешно работать.
[править] Собираем Xilinx U-boot
Нам потребуется mkimage, которая входит в пакет сборки u-boot'а. Эта утилита позволяет завернуть файл ядра Image в uIamge, который уже может быть запущен u-boot'ом.
Забираем у Xilinx'a:
Собираем (нам потребуется пока только mkimage, поэтому конкретный конфиг не важен):
make zynq_zc70x_config
make
В каталоге ./tools появился mkimage, которым мы далее будем пользоваться.
[править] Ядро от OSADL
Существует замечательная контора OSADL, занимающаяся тестированием PREEMPT_RT патча на различных сборках и архитектурах. Они протестировали ядро 3.12.24 с PREEMPT_RT патчем на ZedBoard. Более того, они предоставляют удобные скрипты, которые сами скачивают все нужные ядра (доступен по ссылке внизу страницы, копия).
[править] Скачиваем ядро, патчи, патчим ядро
Скрипт:
- скачивает с kernel.org ванильное ядро 3.12.24
- скачивает с сайта OSADL забирает патчи (см. файл
series
и перечень ниже) для сборки rbs8: - применяет патчи к ядру (
quilt push -a
) - скачивает с сайта OSADL .config файл для сборки rbs8
В патчи входит:
[править] patch-3.12.24-rt38.patch
Собственно PREEMPT_RT патч для данного ядра. Переписывает spinlock'и и т.п. так, чтобы более приоритетная задача их могла быстро выгрузить.
[править] zedboard-monster.patch
Огромный патч для поддержки Zynq'а. Содержит:
- Патчи к ряду важнейших функция ядра
- Набор device tree файлов (zynq-zc702.dtb, zynq-zc702-base-trd.dtb, zynq-zc702-drm-v4l2.dtb, zynq-afx-nand.dtb, zynq-afx-nor.dtb, zynq-cc108.dtb, zynq-zc770-xm010.dtb, zynq-zc770-xm011.dtb, zynq-zc770-xm012.dtb, zynq-zc770-xm013.dtb, zynq-zc706.dtb, zynq-zed.dtb)
- Набор конфигов (xilinx_zynq_apf_defconfig, xilinx_zynq_trd_defconfig, xilinx_zynq_drm_defconfig, xilinx_zynq_defconfig)
- Огромный набор драйверов (AXI, DMA, GPIO, xdevcfg, SPI, USB и т.д.)
- Документация к драйверам
[править] sched-add-per-cpu-load-measurement.patch
[править] add-kernel-parameter-to-disable-defect-cpus.patch
[править] drivers-misc-kconfig-replace-spaces-with-tabs.patch
[править] save-current-patchset-in-kernel.patch
[править] mm-slabinfo-fix-latency.patch
Фиксит длительный mutex в чтении /proc/slabinfo
[править] drivers-gpu-drm-try-loading-builtin-edids-first.patch
[править] drivers-gpu-drm-make-edid_load-return-a-void.patch
[править] add-cpufreq-operating-points-to-dt.patch
[править] Сборка ядра
Рассказываем, где искать mkimage (потребуется для обертки ядра Image -> uImage)
cd tools
export PATH=`pwd`:$PATH
Возвращаемся в linux-3.12.24-rt38.
Собираем ядро, выполнив в директории linux-3.12.24-rt38
команду make
:
Минут через 5 получаем в каталоге ./arch/arm/boot собранное ядро.
[править] Ядро от Xilinx
Подробнее описано на Wiki Xilinx'а: Build kernel.
[править] Получаем исходники ядра
В ядро уже включен набор драйверов от Xilinx'а.
[править] Патчим ядро
На данный момент (02.03.2015) в репозитории лежит ядро 3.18, для которого есть доступный PREEMPT RT патч 3.18.7-rt2.
Качаем патч PREEMPT RT (может потребоваться актуализировать номер версии):
cd linux-rt
wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.18/patch-3.18.7-rt2.patch.gz
gunzip patch-3.18.7-rt2.patch
Применяем патч к ядру:
[править] Конфигурируем ядро
Просим собрать конфиг по-умолчанию:
Вносим желаемые изменения в .config файл, компилируем...и это ядро не запускается на Ориксе.
[править] Пара слов о Device Tree
На PLDA'шных модулях можно найти скомпилированный Device Tree Blob файл. Он легко переводится в читаемый DTS вид:
Утилита dtc доступна в виде исходников в Xilinix'овском гитхабе. Для компиляции потребовалось установить в систему bison и flex.
Получаем:
[править] Лог загрузки различных ядер