Сборка ядра для Орикса — различия между версиями

Материал из SRNS
Перейти к: навигация, поиск
(Лог загрузки различных ядер)
(Лог загрузки различных ядер)
 
(не показаны 10 промежуточных версий 1 участника)
Строка 88: Строка 88:
 
== Собираем Xilinx U-boot ==
 
== Собираем Xilinx U-boot ==
  
Наv потребуется mkimage, которая входит в пакет сборки u-boot'а. Эта утилита позволяет завернуть файл ядра Image в uIamge, который уже может быть запущен u-boot'ом.
+
Нам потребуется mkimage, которая входит в пакет сборки u-boot'а. Эта утилита позволяет завернуть файл ядра Image в uIamge, который уже может быть запущен u-boot'ом.
  
 
Забираем у Xilinx'a:
 
Забираем у Xilinx'a:
Строка 104: Строка 104:
 
В каталоге ./tools появился mkimage, которым мы далее будем пользоваться.
 
В каталоге ./tools появился mkimage, которым мы далее будем пользоваться.
  
== Сборка ядра, тестированного OSADL ==
+
== Ядро от 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">
linux-xlnx/arch/arm/boot/dts$ ./dtc -I dtb -O dts -o somz.dts somz.dtb
+
/dtc$ ./dtc -I dtb -O dts -o somz.dts somz.dtb
 
</source>
 
</source>
 +
 +
Утилита dtc доступна в виде исходников в Xilinix'овском гитхабе. Для компиляции потребовалось установить в систему bison и flex.
  
 
Получаем:
 
Получаем:
Строка 3583: Строка 3583:
 
                 };
 
                 };
 
         };
 
         };
 +
};
 +
</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>
 
</source>
Строка 3591: Строка 4145:
  
 
{{Hider|title = Ядро от PLDA   
 
{{Hider|title = Ядро от PLDA   
|content = U-Boot 2013.10-dirty (Jan 28 2014 - 17:52:15)
+
|content = <source lang="bash">
 +
U-Boot 2013.10-dirty (Jan 28 2014 - 17:52:15)
  
 
Memory: ECC disabled
 
Memory: ECC disabled
Строка 3727: Строка 4282:
  
 
Debian GNU/Linux 7 plda ttyPS0
 
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
 
  |hidden = 1
 
}}
 
}}
Строка 3732: Строка 4470:
 
[[Категория:HOWTO]]
 
[[Категория:HOWTO]]
 
[[Категория:Oryx]]
 
[[Категория:Oryx]]
 +
[[Категория:Zynq]]
 +
[[Категория:EmbeddedLinux]]

Текущая версия на 15:03, 9 ноября 2016

Приведенный мануал справедлив для Kubuntu 14.04 64bit.

Xilinx-design-flow-linux.jpg

Втянуться в тему можно на странице Xilinx Wiki Getting Starting.

Наша цель - собрать новый uImage с применением патча PREEMPT_RT.

Если смотреть на схему, то складывается ощущение, что ядро входит в BOOT.BIN. Но на практике флешка содержит boot.bin, device tree, uImage и образ rootfs. Например, на ZC702:

root@zynq:/mnt# ls -la
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. Оба инструмента бесплатные:

sudo ./Xilinx_Vivado_SDK_2014.4_1119_1_Lin64.bin

В начале установки поступит предложение 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:

export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
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:

SERVER_BUILD_FIRMWARE=0

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-битных библиотек:

sudo apt-get install lib32z1

После чего кросскомплилятор начинает успешно работать.

[править] Собираем Xilinx U-boot

Нам потребуется mkimage, которая входит в пакет сборки u-boot'а. Эта утилита позволяет завернуть файл ядра Image в uIamge, который уже может быть запущен u-boot'ом.

Забираем у Xilinx'a:

git clone git://github.com/Xilinx/u-boot-xlnx.git

Собираем (нам потребуется пока только mkimage, поэтому конкретный конфиг не важен):

cd u-boot-xlnx
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 u-boot-xlnx
cd tools
export PATH=`pwd`:$PATH

Возвращаемся в linux-3.12.24-rt38.

Собираем ядро, выполнив в директории linux-3.12.24-rt38 команду make:

make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage

Минут через 5 получаем в каталоге ./arch/arm/boot собранное ядро.

[править] Ядро от Xilinx

Подробнее описано на Wiki Xilinx'а: Build kernel.

[править] Получаем исходники ядра

git clone git://github.com/Xilinx/linux-xlnx.git

В ядро уже включен набор драйверов от Xilinx'а.

[править] Патчим ядро

На данный момент (02.03.2015) в репозитории лежит ядро 3.18, для которого есть доступный PREEMPT RT патч 3.18.7-rt2.

Качаем патч PREEMPT RT (может потребоваться актуализировать номер версии):

cp -R linux-xlnx linux-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

Применяем патч к ядру:

cat patch-3.18.7-rt2.patch | patch -p1

[править] Конфигурируем ядро

Просим собрать конфиг по-умолчанию:

make ARCH=arm xilinx_zynq_defconfig

Вносим желаемые изменения в .config файл, компилируем...и это ядро не запускается на Ориксе.

[править] Пара слов о Device Tree

На PLDA'шных модулях можно найти скомпилированный Device Tree Blob файл. Он легко переводится в читаемый DTS вид:

/dtc$ ./dtc -I dtb -O dts -o somz.dts somz.dtb

Утилита dtc доступна в виде исходников в Xilinix'овском гитхабе. Для компиляции потребовалось установить в систему bison и flex.

Получаем:



[править] Лог загрузки различных ядер



Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты