一、定制linux系统命令
1.通过Vivado创建硬件平台,得到hdf硬件描述文件
2.在使用petalinux之前使用sptl命令配置petalinux工作环境
$sptl
3.创建petalinux工程
$cd
$mkdir -p work/petalinux/
petalinux-create -t project --template zynq -n zynq_linux
4.使用petalinux-config --get-hw-description,将hdf文件导入到petalinux工程中并配置petalinux工程
cd zynq_linux petalinux-config --get-hw-description /mnt/hgfs/share/zynq_petalinux.sdk/
5.使用 petalinux-config -c kernel 配置 Linux 内核
petalinux-config -c kernel
- 配置 Linux 根文件系统
petalinux-config -c rootfs
- 配置设备树文件;
使用 vi 命令打开 system-user.dtsi 文件,如下所示:
原厂的设备树目录在
D:\科研资料存储\正点原子\启明星开发板\【正点原子】启明星ZYNQ开发板资料 资料盘(A盘)\【正点原子】启明星ZYNQ开发板资料 资料盘(A盘)\4_SourceCode\3_Embedded_Linux\zynq_petalinux\1_customize_linux\software\petalinux\project-spec\meta-user\recipes-bsp\device-tree\files
设备树为
/include/ "system-conf.dtsi"
#define GPIO_ACTIVE_HIGH 0
#define GPIO_ACTIVE_LOW 1
/ {
model = "Navigator Development Board";
compatible = "alientek,zynq-7010","xlnx,zynq-7000";
usb_phy0: phy0@e0002000 {
compatible = "ulpi-phy";
#phy-cells = <0>;
reg = <0xe0002000 0x1000>;
view-port = <0x0170>;
drv-vbus;
};
leds {
compatible = "gpio-leds";
gpio-led1 {
label = "ps_led1";
gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
gpio-led2 {
label = "ps_led2";
gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "timer";
};
gpio-led3 {
label = "ps_led3";
gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
gpio-led4 {
label = "pl_led1";
gpios = <&gpio0 58 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "timer";
};
gpio-led5 {
label = "pl_led2";
gpios = <&gpio0 59 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
gpio-led6 {
label = "pl_led3";
gpios = <&gpio0 60 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
};
keys {
compatible = "gpio-keys-polled";
poll-interval = <20>;
autorepeat;
touch-key {
label = "touch_key";
gpios = <&gpio0 56 GPIO_ACTIVE_HIGH>;
linux,code = <1>; // ESC
};
gpio-key1 {
label = "pl_key1";
gpios = <&gpio0 54 GPIO_ACTIVE_LOW>;
linux,code = <105>; // Right
};
gpio-key2 {
label = "pl_key2";
gpios = <&gpio0 55 GPIO_ACTIVE_LOW>;
linux,code = <106>; // Left
};
gpio-key3 {
label = "ps_key1";
gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
linux,code = <103>; // Up
};
gpio-key4 {
label = "ps_key2";
gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
linux,code = <108>; // Down
};
};
beep {
compatible = "gpio-beeper";
gpios = <&gpio0 57 GPIO_ACTIVE_HIGH>;
};
video_timings {
timing_4x3_480x272: timing0 {
clock-frequency = <9000000>;
hactive = <480>;
vactive = <272>;
hback-porch = <40>;
hsync-len = <20>;
hfront-porch = <5>;
vback-porch = <8>;
vsync-len = <3>;
vfront-porch = <8>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
timing_4x3_800x480: timing1 {
clock-frequency = <33000000>;
hactive = <800>;
vactive = <480>;
hback-porch = <88>;
hsync-len = <48>;
hfront-porch = <40>;
vback-porch = <32>;
vsync-len = <3>;
vfront-porch = <13>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
timing_7_800x480: timing2 {
clock-frequency = <33000000>;
hactive = <800>;
vactive = <480>;
hback-porch = <46>;
hsync-len = <20>;
hfront-porch = <210>;
vback-porch = <23>;
vsync-len = <3>;
vfront-porch = <22>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
timing_7_1024x600: timing3 {
clock-frequency = <51000000>;
hactive = <1024>;
vactive = <600>;
hback-porch = <140>;
hsync-len = <20>;
hfront-porch = <160>;
vback-porch = <20>;
vsync-len = <3>;
vfront-porch = <12>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
timing_10x1_1280x800: timing4 {
clock-frequency = <71100000>;
hactive = <1280>;
vactive = <800>;
hback-porch = <80>;
hsync-len = <10>;
hfront-porch = <70>;
vback-porch = <10>;
vsync-len = <3>;
vfront-porch = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <1>;
};
timing_1920x1080: timing5 {
clock-frequency = <148500000>;
hactive = <1920>;
vactive = <1080>;
hback-porch = <148>;
hsync-len = <44>;
hfront-porch = <88>;
vback-porch = <36>;
vsync-len = <5>;
vfront-porch = <4>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <1>;
};
};
};
&i2c1 {
clock-frequency = <100000>;
eeprom@50 {
compatible = "atmel,24c64";
reg = <0x50>;
pagesize = <32>;
};
rtc@51 {
compatible = "nxp,pcf8563";
reg = <0x51>;
};
};
&usb0 {
status = "okay";
dr_mode = "otg";
usb-phy = <&usb_phy0>;
};
vi project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
8.编译成功,制作BOOT.BIN启动文件
ZYNQ的启动文件BOOT.BIN一般包含fsb1文件、bitstream文件和uboot文件。使用下面命令生成BOOT.BIN文件
petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force
参数“–fsbl ./images/linux/zynq_fsbl.elf”指定 fsbl 文件的位置,如果不指定文件位置如用于指定 bitstream 文件的位置参数“–fpga”, Petalinux 会自动使用默认位置。执行结果如下图所示:
11.们将该工程 image/linux 目录下的 BOOT.BIN 和 image.ub 文件拷贝到
/mnt/hgfs/share,然后共享到计算机中,然后放到制作的系统盘中