芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 761|回复: 4

Altera AC550-SoC开发板(5CSXFC6C6U23I7)用户自助服务手册

[复制链接]
  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 428

    主题

    811

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16107
    QQ
    发表于 2024-10-16 21:19:49 | 显示全部楼层 |阅读模式
    本帖作为小梅哥AC550-SoC开发板资料帖。分成多个楼层,请大家注意查看后续回复楼层内容。

    本产品正式量产版型号为AC550-SoC开发板,由核心板和底板构成。核心板型号为AC820-CVA6、底板型号为AC550。组合得到的开发板型号为AC550-SoC。以下为核心板和评估底板原理图pdf文件。

    核心板原理图: AC820-CVA6-240930.pdf (3.36 MB, 下载次数: 293)
    底板原理图   : AC550-241101.pdf (6.84 MB, 下载次数: 394)


    本产品的使用资料正在制作中,预计月底发布。大家也可以直接参考我们原AC540-SoC 开发板的资料



    Altera SoC FPGA开发常见问题和技巧合集(目录汇总帖)
    https://www.corecourse.cn/forum.php?mod=viewthread&tid=29804
    (出处: 芯路恒电子技术论坛)
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 428

    主题

    811

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16107
    QQ
     楼主| 发表于 2024-10-24 16:33:42 | 显示全部楼层
    本楼层主要提供开发板的硬件信息


    SOC FPGA芯片型号:
        5CSXFC6C6U23I7

    DDR3型号:
        DDR3实际使用型号:F60C1A0004-M79W(江波龙,单颗512MB,工业级)
        兼容型号:MT41K256M16 RE-125,位宽为32位(单颗是16位,核心板使用2颗,组成32位)

    EMMC规格:
        江波龙8GB:FEMDRM008G-58A39

    FPGA配置FLASH:
        N25Q128A(EPCS128)(零售款默认不焊接,不安装)

    HPS QSPI FLASH:
        N25Q128A(EPCS128)(这个型号支持使用Quartus烧录,但是已经很难买到,后续使用华邦的W25Q128,通过HPS烧录(不再支持Quartus烧录))

    供电:
        核心板使用单5V供电,供电电流建议不低于5A,宜采用3A的DCDC供电,不建议使用LDO供电
        开发板使用6~12V DC供电,或在功耗不高的实验场景,可以使用Type-C供电(仅供简单小实验用,图个方便,开发调试项目时,强烈建议使用DC供电)

    CLK50MPIN_W21
    CLK27MPIN_D12
    BEEPPIN_AH11
    CAN0_RXDPIN_AD17
    CAN0_TXDPIN_AH14
    CAN1_RXDPIN_AH12
    CAN1_TXDPIN_AE17
    CMOS_D0PIN_AA24
    CMOS_D1PIN_AA23
    CMOS_D2PIN_W15
    CMOS_D3PIN_AD20
    CMOS_D4PIN_Y16
    CMOS_D5PIN_AE20
    CMOS_D6PIN_AG16
    CMOS_D7PIN_W14
    CMOS_HREFPIN_AG14
    CMOS_PCLKPIN_T13
    CMOS_PWDNPIN_V15
    CMOS_RSTPIN_V16
    CMOS_SCLKPIN_U13
    CMOS_SDAPIN_AA13
    CMOS_VSYNCPIN_V13
    CMOS_XCLKPIN_U14
    DVI_CLK_NPIN_AE11
    DVI_CLK_PPIN_AD11
    DVI_TX0_NPIN_AE9
    DVI_TX0_PPIN_AD10
    DVI_TX1_NPIN_AA11
    DVI_TX1_PPIN_Y11
    DVI_TX2_NPIN_W12
    DVI_TX2_PPIN_V12
    ES_ASDOUTPIN_AG21
    ES_CCLKPIN_Y18
    ES_CDATAPIN_Y17
    ES_DLCLKPIN_AD19
    ES_DSCLKPIN_Y19
    ES_DSDINPIN_AE19
    ES_MCLKPIN_AA20
    FPGA_ENET0_GTX_CLKPIN_AH27
    FPGA_ENET0_MDCPIN_AG23
    FPGA_ENET0_MDIOPIN_AF23
    FPGA_ENET0_RESET_NPIN_AF22
    FPGA_ENET0_RX_CLKPIN_Y13
    FPGA_ENET0_RX_DATA0PIN_AE15
    FPGA_ENET0_RX_DATA1PIN_AG13
    FPGA_ENET0_RX_DATA2PIN_AF13
    FPGA_ENET0_RX_DATA3PIN_AG11
    FPGA_ENET0_RX_DVPIN_AF15
    FPGA_ENET0_TX_DATA0PIN_AF28
    FPGA_ENET0_TX_DATA1PIN_AF27
    FPGA_ENET0_TX_DATA2PIN_AE26
    FPGA_ENET0_TX_DATA3PIN_AF26
    FPGA_ENET0_TX_ENPIN_AG28
    FPGA_KEY0PIN_AH8
    FPGA_KEY1PIN_AH7
    FPGA_LED0PIN_AE22
    FPGA_LED1PIN_AH17
    FPGA_LED2PIN_AA15
    FPGA_LED3PIN_AF18
    FPGA_LED4PIN_AH16
    FPGA_LED5PIN_AG15
    FPGA_LED6PIN_AH13
    FPGA_LED7PIN_AF17
    HPS_USB_RESET_NPIN_V11
    IIC_SCLPIN_AG8
    IIC_SDAPIN_AC24
    LCD_B0PIN_AH24
    LCD_B1PIN_AH23
    LCD_B2PIN_AH22
    LCD_B3PIN_AF20
    LCD_B4PIN_AG20
    LCD_BLPIN_AH18
    LCD_DEPIN_AG18
    LCD_G0PIN_AH26
    LCD_G1PIN_AC23
    LCD_G2PIN_AB23
    LCD_G3PIN_AF25
    LCD_G4PIN_AG25
    LCD_G5PIN_AG24
    LCD_HSYNCPIN_AG19
    LCD_PCLKPIN_Y15
    LCD_R0PIN_AF21
    LCD_R1PIN_AD26
    LCD_R2PIN_AE25
    LCD_R3PIN_AE24
    LCD_R4PIN_AG26
    LCD_VSYNCPIN_AH19
    NetU1_A51PIN_W8
    NetU1_B57PIN_AH9
    NetU1_D69PIN_AH21
    PL_GPIO0PIN_AE12
    PL_GPIO1PIN_AD12
    PL_GPIO2PIN_AF11
    PL_GPIO3PIN_AF10
    PL_GPIO4PIN_AE7
    PL_GPIO5PIN_AF8
    PL_GPIO6PIN_AF7
    PL_GPIO7PIN_AG6
    PL_GPIO8PIN_AF5
    PL_GPIO9PIN_AF6
    PL_GPIO10PIN_AE8
    PL_GPIO11PIN_AF9
    PL_GPIO12PIN_AH6
    PL_GPIO13PIN_AH5
    PL_GPIO14PIN_AG5
    PL_GPIO15PIN_AH4
    PL_GPIO16PIN_AH3
    PL_GPIO17PIN_AH2
    PL_GPIO18PIN_W11
    PL_GPIO19PIN_U9
    PL_GPIO20PIN_T8
    PL_GPIO21PIN_U10
    PL_GPIO22PIN_V10
    PL_GPIO23PIN_T11
    PL_GPIO24PIN_U11
    PL_GPIO25PIN_T12
    PL_GPIO26PIN_AD5
    PL_GPIO27PIN_AE6
    PL_GPIO28PIN_AE4
    PL_GPIO29PIN_AF4
    PL_GPIO30PIN_AC4
    PL_GPIO31PIN_AD4
    PL_GPIO32PIN_AA4
    PL_GPIO33PIN_AB4
    PL_GPIO34PIN_Y5
    PL_GPIO35PIN_Y4
    PL_UART_RXPIN_AG10
    PL_UART_TXPIN_AG9
    RS485_RENPIN_AE23
    RS485_RXDPIN_AC22
    RS485_TXDPIN_AD23
    TP_INTPIN_AA18
    TP_RSTPIN_AA19
    USB_4G_RSTnPIN_Y8



    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 428

    主题

    811

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16107
    QQ
     楼主| 发表于 2024-10-29 20:31:36 | 显示全部楼层

    烧录HPS QSPI Flash操作方法

    1、bsp-editor中设置通过QSPI Boot

    image.png


    2、在Advance中关闭看门狗

    3、进入spl_bsp_qspi (spl_bsp)路径下

    4、使用make uboot命令生成u-boot.img

    5、将uboot-socfpga/u-boot.img重命名为u-boot.img.bin并拷贝到spl_bsp_qspi (spl_bsp)路径下

    1. cp uboot-socfpga/u-boot.img  u-boot.img.bin
    复制代码


    6、使用make命令生成preloader-mkpimage.bin文件

    7、使用quartus_hps 命令将preloader-mkpimage.bin文件烧录进flash的0x00000地址

    1. quartus_hps -c 1 -o PV -a 0x00000 preloader-mkpimage.bin
    复制代码


    8、使用quartus_hps 命令将u-boot.img.bin文件烧录进flash的0x60000地址

    1. quartus_hps -c 1 -o PV -a 0x60000 u-boot.img.bin
    复制代码




    如果要再次烧录,可能会因为qspi默认启动后设置了flash,导致jtag获取不到flash id,此时需要先破坏qspi的启动条件。比如将QSPI的2号脚和4号脚短接再上电,上电后保持3秒再释放,重新烧录。或者用sd卡进入uboot,在uboot下擦除flash。

    1. sf probe 0
    2. sf erase 0x0 0x100000
    复制代码


    更多内容请参考下述帖子
    https://www.cnblogs.com/StevenZh ... Flash_1024Mbit.html


    通过xml文件和sopcinfo文件生成dts【慎用,xml对不上会有大问题】

    1. sopc2dts --input soc_system.sopcinfo --output soc_system.dts --board soc_system_board_info.xml --board hps_ommon_board_info.xml --bridge-removal all --clocks
    复制代码


    通过dts生成dtb文件命令

    1. dtc -I dts -o dtb -fo socfpga.dtb soc_system.dts
    复制代码



    KSZ9021网卡芯片正常工作设备树(GMAC1)

    1.                 hps_0_gmac1: ethernet@0xff702000 {
    2.                         compatible = "synopsys,dwmac-16.1", "altr,socfpga-stmmac", "snps,dwmac-3.70a", "snps,dwmac";
    3.                         reg = <0xff702000 0x00002000>;
    4.                         interrupt-parent = <&hps_0_arm_gic_0>;
    5.                         interrupts = <0 120 4>;
    6.                         clocks = <&emac1_clk>;
    7.                         clock-names = "stmmaceth";        /* embeddedsw.dts.params.clock-names type STRING */
    8.                         interrupt-names = "macirq";        /* embeddedsw.dts.params.interrupt-names type STRING */
    9.                         rx-fifo-depth = <4096>;        /* embeddedsw.dts.params.rx-fifo-depth type NUMBER */
    10.                         snps,multicast-filter-bins = <256>;        /* embeddedsw.dts.params.snps,multicast-filter-bins type NUMBER */
    11.                         snps,perfect-filter-entries = <128>;        /* embeddedsw.dts.params.snps,perfect-filter-entries type NUMBER */
    12.                         status = "okay";        /* embeddedsw.dts.params.status type STRING */
    13.                         tx-fifo-depth = <4096>;        /* embeddedsw.dts.params.tx-fifo-depth type NUMBER */
    14.                         address-bits = <48>;
    15.                         max-frame-size = <3800>;        /* appended from boardinfo */
    16.                         local-mac-address = [00 00 00 00 00 00];
    17.                         phy-mode = "rgmii";        /* appended from boardinfo */
    18.                         snps,phy-addr = <0xffffffff>;        /* appended from boardinfo */
    19.                         phy-addr = <0xffffffff>;        /* appended from boardinfo */
    20.                         txc-skew-ps = <3000>;        /* appended from boardinfo */
    21.                         rxc-skew-ps = <3000>;        /* appended from boardinfo */
    22.                         txen-skew-ps = <0>;        /* appended from boardinfo */
    23.                         rxdv-skew-ps = <0>;        /* appended from boardinfo */
    24.                         rxd0-skew-ps = <0>;        /* appended from boardinfo */
    25.                         rxd1-skew-ps = <0>;        /* appended from boardinfo */
    26.                         rxd2-skew-ps = <0>;        /* appended from boardinfo */
    27.                         rxd3-skew-ps = <0>;        /* appended from boardinfo */
    28.                         txd0-skew-ps = <0>;        /* appended from boardinfo */
    29.                         txd1-skew-ps = <0>;        /* appended from boardinfo */
    30.                         txd2-skew-ps = <0>;        /* appended from boardinfo */
    31.                         txd3-skew-ps = <0>;        /* appended from boardinfo */
    32.                         altr,sysmgr-syscon = <&hps_0_sysmgr 0x00000060 2>;        /* appended from boardinfo */
    33.                         reset-names = "stmmaceth";        /* appended from boardinfo */
    34.                         resets = <&hps_0_rstmgr 33>;        /* appended from boardinfo */
    35.                 }; //end ethernet@0xff702000 (hps_0_gmac1)
    复制代码



    SDMMC正常工作设备树

    1.                
    2.                 hps_0_sdmmc: flash@0xff704000 {
    3.                         compatible = "snps,mmc-17.1", "altr,socfpga-dw-mshc";
    4.                         reg = <0xff704000 0x00001000>;
    5.                         interrupt-parent = <&hps_0_arm_gic_0>;
    6.                         interrupts = <0 139 4>;
    7.                         clocks = <&l4_mp_clk &sdmmc_clk_divided>;
    8.                         clock-names = "biu", "ciu";
    9.                         fifo-depth = <1024>;        /* embeddedsw.dts.params.fifo-depth type NUMBER */
    10.                         num-slots = <1>;        /* embeddedsw.dts.params.num-slots type NUMBER */
    11.                         status = "okay";        /* embeddedsw.dts.params.status type STRING */
    12.                         #address-cells = <1>;        /* appended from boardinfo */
    13.                         #size-cells = <0>;        /* appended from boardinfo */
    14.                         broken-cd;        /* appended from boardinfo */
    15.                         cap-mmc-highspeed;        /* appended from boardinfo */
    16.                         cap-sd-highspeed;        /* appended from boardinfo */
    17.                         bus-width = <4>;        /* appended from boardinfo */
    18.                         altr,dw-mshc-ciu-div = <3>;        /* appended from boardinfo */
    19.                         altr,dw-mshc-sdr-timing = <0 3>;        /* appended from boardinfo */
    20.                         supports-highspeed;        /* appended from boardinfo */
    21.                         cd = <&hps_0_gpio1_porta 8 0>;        /* appended from boardinfo */
    22.                         cd-gpios = <&hps_0_gpio1_porta 8 0>;        /* appended from boardinfo */
    23.                         vmmc-supply = <®ulator_3_3v>;        /* appended from boardinfo */
    24.                         vqmmc-supply = <®ulator_3_3v>;        /* appended from boardinfo */

    25.                         slot_0: slot@0 {
    26.                                 reg = <0>;        /* appended from boardinfo */
    27.                                 bus-width = <4>;        /* appended from boardinfo */
    28.                         }; //end slot@0 (slot_0)
    29.                 }; //end flash@0xff704000 (hps_0_sdmmc)        


    30.                 hps_0_clkmgr: clkmgr@0xffd04000 {
    31.                         
    32.                         。。。。。。。。。。
    33.                         sdmmc_clk_divided: sdmmc_clk_divided {
    34.                                 #clock-cells = <0>;        /* appended from boardinfo */
    35.                                 compatible = "altr,socfpga-gate-clk";        /* appended from boardinfo */
    36.                                 clocks = <&sdmmc_clk>;        /* appended from boardinfo */
    37.                                 clk-gate = <0x000000a0 0x00000008>;        /* appended from boardinfo */
    38.                                 fixed-divider = <4>;        /* appended from boardinfo */
    39.                         }; //end sdmmc_clk_divided (sdmmc_clk_divided)
    40.                         
    41.                 }; //end clkmgr@0xffd04000 (hps_0_clkmgr)

    42.                 regulator_3_3v: vcc3p3-regulator {
    43.                         compatible = "regulator-fixed";        /* appended from boardinfo */
    44.                         regulator-name = "3.3V";        /* appended from boardinfo */
    45.                         regulator-min-microvolt = <3300000>;        /* appended from boardinfo */
    46.                         regulator-max-microvolt = <3300000>;        /* appended from boardinfo */
    47.                 }; //end vcc3p3-regulator (regulator_3_3v)
    复制代码




    内核调试模式的环境变量设置:

    1. setenv mmcbootkgdb "setenv bootargs console=ttyS0,115200 kgdboc=ttyS0,115200 kgdbwait root=/dev/mmcblk0p2 rw rootwait;bootz 0x8000 - 0x00000100"
    复制代码


    正常运行模式环境变量设置:

    1. setenv mmcboot "setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait;bootz 0x8000 - 0x00000100"
    复制代码



    设备树中生成的FPGA侧外设中断号计算方法:外设中断号+32=实际对应到HPS的中断号,比如DTS中button_pio中断号为41,则对应到HPS的中断号为41+32=73。32是因为HPS的0-31号中断为CPU本身的中断,非外设中断号,外设中断号从32开始算的。详见cyclone5_handbook的9. Cortex-A9 Microprocessor Unit Subsystem >> Cortex-A9 MPCore >> Generic Interrupt Controller。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 428

    主题

    811

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16107
    QQ
     楼主| 发表于 4 天前 | 显示全部楼层

    为了让内核支持ubuntu系统,需要开启大容量块支持,开启下列支持

    1. CONFIG_LBDAF=y  # 支持大块设备寻址
    复制代码


    使用FPGA的IO作为GT911触摸芯片的中断脚

    为了让内核驱动支持使用FPGA侧的PIO作为INT脚,需要修改“goodix_request_irq”函数的内容,让其通过GPIO申请中断

    1. /*
    2. static int goodix_request_irq(struct goodix_ts_data *ts)
    3. {
    4.         return devm_request_threaded_irq(&ts->client->dev, ts->client->irq,
    5.                                          NULL, goodix_ts_irq_handler,
    6.                                          ts->irq_flags, ts->client->name, ts);
    7. }
    8. */

    9. static int goodix_request_irq(struct goodix_ts_data *ts)
    10. {

    11. #if 0
    12.     int irq = ts->client->irq;  
    13.     unsigned long irq_flags = ts->irq_flags;  
    14.   
    15.     // 添加调试打印
    16.     dev_info(&ts->client->dev, "Requesting IRQ:\n");
    17.     dev_info(&ts->client->dev, "  IRQ number: %d\n", irq);
    18.     dev_info(&ts->client->dev, "  IRQ flags: 0x%lx\n", irq_flags);
    19.   
    20.     // 检查 irq 是否有效
    21.     if (!irq) {
    22.         dev_err(&ts->client->dev, "Invalid IRQ number\n");
    23.         return -EINVAL;
    24.     }

    25.         return devm_request_threaded_irq(&ts->client->dev, ts->client->irq,
    26.                                          NULL, goodix_ts_irq_handler,
    27.                                          ts->irq_flags, ts->client->name,ts);
    28. #endif

    29.     int irq;
    30.     unsigned long irq_flags;
    31.   
    32.     // 尝试从GPIO获取IRQ号
    33.     if (ts->gpiod_int)
    34.         irq = gpiod_to_irq(ts->gpiod_int);
    35.     else
    36.         irq = ts->client->irq;
    37.    
    38.     dev_info(&ts->client->dev, "Requesting IRQ:\n");
    39.     dev_info(&ts->client->dev, "  IRQ GPIO: %d\n",
    40.              ts->gpiod_int ? desc_to_gpio(ts->gpiod_int) : -1);
    41.     dev_info(&ts->client->dev, "  IRQ number: %d\n", irq);
    42.     dev_info(&ts->client->dev, "  Client IRQ: %d\n", ts->client->irq);
    43.   
    44.     irq_flags = ts->irq_flags;
    45.     dev_info(&ts->client->dev, "  IRQ flags: 0x%lx\n", irq_flags);
    46.   
    47.     // 检查 irq 是否有效
    48.     if (irq <= 0) {
    49.         dev_err(&ts->client->dev, "Invalid IRQ number: %d\n", irq);
    50.         return -EINVAL;
    51.     }

    52.     // 保存获取的IRQ号
    53.     ts->client->irq = irq;

    54.     return devm_request_threaded_irq(&ts->client->dev, irq,
    55.                      NULL, goodix_ts_irq_handler,
    56.                      irq_flags, ts->client->name, ts);
    57. }

    复制代码


    设备树中,需要按如下格式修改

    1. hps_0_i2c0: i2c@0xffc04000 {
    2.         compatible = "snps,designware-i2c-17.1", "snps,designware-i2c";
    3.         reg = <0xffc04000 0x00000100>;
    4.         interrupt-parent = <&hps_0_arm_gic_0>;
    5.         interrupts = <0 158 4>;
    6.         clocks = <&l4_sp_clk>;
    7.         emptyfifo_hold_master = <1>;        /* embeddedsw.dts.params.emptyfifo_hold_master type NUMBER */
    8.         status = "okay";        /* embeddedsw.dts.params.status type STRING */

    9.         #address-cells = <1>;
    10.         #size-cells = <0>;
    11.         speed-mode = <0>;        /* appended from boardinfo */
    12.         clock-frequency = <100000>;        /* appended from boardinfo */
    13.         i2c-sda-falling-time-ns = <5000>;        /* appended from boardinfo */
    14.         i2c-scl-falling-time-ns = <5000>;        /* appended from boardinfo */

    15.                 touchpad: goodix,gt911@0x38 {
    16.                                 compatible = "goodix,gt911";
    17.                                 reg = <0x00000038>;
    18. //              interrupt-parent = <&tp_pio>;        /* appended from boardinfo */
    19. //              interrupts = <0 0>;        /* appended from boardinfo */
    20.                                 irq-gpios = <&tp_pio 0 0>;        /* appended from boardinfo */
    21.                                 reset-gpios = <&tp_pio 1 0>;        /* appended from boardinfo */
    22.                 }; //end goodix,gt911@0x38 (touchpad)

    23.         touchpad1: goodix,gt911@0x5d {
    24.                 compatible = "goodix,gt911";
    25.                 reg = <0x0000005D>;

    26.                 //自定义添加
    27. //              interrupt-parent = <&tp_pio>;        /* appended from boardinfo */
    28. //              interrupts = <0 0>;        /* appended from boardinfo */
    29.                 irq-gpios = <&tp_pio 0 0>;

    30.                 //该选项不可行
    31. //              interrupt-parent = <&tp_pio>;        /* appended from boardinfo */
    32. //              interrupts = <0 0>;        /* appended from boardinfo */
    33. //              irq-gpios = <&tp_pio 0 0>;        /* appended from boardinfo */

    34.                 //该选项可行
    35. //              interrupt-parent = <&hps_0_gpio2_porta>;        /* appended from boardinfo */
    36. //              interrupts = <3 0>;        /* appended from boardinfo */
    37. //              irq-gpios = <&hps_0_gpio2_porta 3 0>;        /* appended from boardinfo */

    38.                 reset-gpios = <&tp_pio 1 0>;        /* appended from boardinfo */
    39.         }; //end goodix,gt911@0x5D (touchpad)

    40. }; //end i2c@0xffc04000 (hps_0_i2c0)

    复制代码

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 428

    主题

    811

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16107
    QQ
     楼主| 发表于 4 天前 | 显示全部楼层
    https://blog.csdn.net/weixin_43649647/article/details/123868495
    https://www.cnblogs.com/milton/p/12074890.html
    参考这两篇文章可以自己在ubuntu下制作和修改img文件内容

    在ubuntu下,制作img文件
    第一步,使用touch命令创建img文件

    1. touch sd.img
    复制代码



    第二步,使用truncate命令修改文件尺寸,比如将img文件指定为8GB(8192*1024*1024=8,589,934,592)

    1. truncate --size=8589934592  sd.img
    复制代码


    第三步,使用losetup命令挂载img文件为虚拟硬盘

    1. sudo losetup --show -f sd.img
    2. /dev/loop14
    复制代码

    /dev/loop14这个是终端自动弹出的,不同设备不一定一致,后面的所有/dev/loop13都要改成自己终端显示的

    第四步,使用fdisk对镜像进行分区

    1. sudo fdisk /dev/loop14
    复制代码


    1. fpgaer@ubuntu:$ sudo fdisk /dev/loop14
    2. Welcome to fdisk (util-linux 2.34).
    3. Changes will remain in memory only, until you decide to write them.
    4. Be careful before using the write command.

    5. Device does not contain a recognized partition table.
    6. Created a new DOS disklabel with disk identifier 0xfb8adc85.

    7. Command (m for help):

    复制代码


    输入p可查看该分区的大小:


    1. Command (m for help): p
    2. Disk /dev/loop14: 8 GiB, 8589934592 bytes, 16777216 sectors
    3. Units: sectors of 1 * 512 = 512 bytes
    4. Sector size (logical/physical): 512 bytes / 512 bytes
    5. I/O size (minimum/optimal): 512 bytes / 512 bytes
    6. Disklabel type: dos
    7. Disk identifier: 0xfb8adc85

    复制代码



    1.2.创建a2主分区
    主分区存放的是预加载程序映像。每个预加载程序映像(在预加载程序部分生成)将包含四个冗余的64KB预加载程序映像(以防闪存损坏),因此该分区至少需要256KB。

    输入n,开始创建分区,然后输入p将该分区设为主分区,分区号设为3,然后启动地址为默认直接回车(MBR占用1M空间,所以起始空间为2048bit),结束地址处,输入+1M,即创建该分区为1MB。

    1. Command (m for help): p
    2. Disk /dev/loop14: 8 GiB, 8589934592 bytes, 16777216 sectors
    3. Units: sectors of 1 * 512 = 512 bytes
    4. Sector size (logical/physical): 512 bytes / 512 bytes
    5. I/O size (minimum/optimal): 512 bytes / 512 bytes
    6. Disklabel type: dos
    7. Disk identifier: 0xfb8adc85

    8. Command (m for help): ^C
    9. Do you really want to quit? n

    10. Command (m for help): n
    11. Partition type
    12.    p   primary (0 primary, 0 extended, 4 free)
    13.    e   extended (container for logical partitions)
    14. Select (default p): p
    15. Partition number (1-4, default 1): 3
    16. First sector (2048-16777215, default 2048):
    17. Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-16777215, default 16777215): +1M

    18. Created a new partition 3 of type 'Linux' and of size 1 MiB.


    复制代码


    默认情况下,fdisk用“Linux”类型创建每个分区。我们需要再进行设置一下,改为a2类型。输入t进行修改,然后输入a2 进行设置,因为a2是altera的专属设置,因此idisk识别不了,即显示unknown。

    1. Command (m for help): t
    2. Selected partition 3
    3. Hex code (type L to list all codes): a2
    4. Changed type of partition 'Linux' to 'unknown'.

    复制代码



    1.3.创建根文件系统分区
    此时,Master Boot Record(MBR)和A2分区将用完2mb。现在,我们将为根文件系统添加6G(6144MB)的分区。将分区2创建为6144MB的主分区,默认起始扇区为4096。

    1. Command (m for help): n
    2. Partition type
    3.    p   primary (1 primary, 0 extended, 3 free)
    4.    e   extended (container for logical partitions)
    5. Select (default p): p
    6. Partition number (1,2,4, default 1): 2
    7. First sector (4096-16777215, default 4096):
    8. Last sector, +/-sectors or +/-size{K,M,G,T,P} (4096-16777215, default 16777215): +6144M

    9. Created a new partition 2 of type 'Linux' and of size 6 GiB.

    复制代码


    默认情况下,fdisk实用程序将分区类型设置为“Linux ”,因此我们不需要更改根文件系统的分区类型(我们仍然需要在以后实际创建文件系统)。

    1.4.创建FAT分区
    FAT分区存放boot文件。该分区为主分区,为1号分区位置。

    1. Command (m for help): n
    2. Partition type
    3.    p   primary (2 primary, 0 extended, 2 free)
    4.    e   extended (container for logical partitions)
    5. Select (default p): p
    6. Partition number (1,4, default 1): 1
    7. First sector (12587008-16777215, default 12587008):
    8. Last sector, +/-sectors or +/-size{K,M,G,T,P} (12587008-16777215, default 16777215):

    9. Created a new partition 1 of type 'Linux' and of size 2 GiB.

    复制代码


    将分区1更改为FAT分区(这不会创建文件系统,只是通知读取SD卡的设备在这个分区上将有一个FAT文件系统)。

    1. Command (m for help): t
    2. Partition number (1-3, default 3): 1
    3. Hex code (type L to list all codes): b

    4. Changed type of partition 'Linux' to 'W95 FAT32'.

    复制代码


    1.5.验证及保存
    打印出分区表,并验证它如下所示。

    1. Command (m for help): p
    2. Disk /dev/loop14: 8 GiB, 8589934592 bytes, 16777216 sectors
    3. Units: sectors of 1 * 512 = 512 bytes
    4. Sector size (logical/physical): 512 bytes / 512 bytes
    5. I/O size (minimum/optimal): 512 bytes / 512 bytes
    6. Disklabel type: dos
    7. Disk identifier: 0x39343cdb

    8. Device        Boot    Start      End  Sectors Size Id Type
    9. /dev/loop14p1      12587008 16777215  4190208   2G  b W95 FAT32
    10. /dev/loop14p2          4096 12587007 12582912   6G 83 Linux
    11. /dev/loop14p3          2048     4095     2048   1M a2 unknown

    12. Partition table entries are not in disk order.

    13. Command (m for help): w
    14. The partition table has been altered.
    15. Calling ioctl() to re-read partition table.
    16. Re-reading the partition table failed.: Invalid argument

    17. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

    复制代码


    最后输入如下指令告诉内核进行更新,否则内核找不到刚才设立的分区。

    1. sudo partprobe /dev/loop14
    复制代码



    ubuntu下更新preloader.img文件到sd卡的A2分区命令

    1. sudo dd if=preloader.img of=/dev/loop14p3 bs=64k seek=0
    复制代码

    其中loop14p3 是ubuntu下挂载img文件后的A2分区名称,如果是实体SD卡,则可能是sdb3、sdc3,具体实体卡名是什么,可以通过sudo fdisk -l查看
    bs是块大小,这里以64k是因为preloader.img文件尺寸为固定64K

    ubuntu下更新u-boot.img文件到sd卡的A2分区命令

    1. sudo dd if=u-boot.img of=/dev/loop14p3 bs=64k seek=4
    复制代码


    其中loop14p3 是ubuntu下挂载img文件后的A2分区名称,如果是实体SD卡,则可能是sdb3、sdc3,具体实体卡名是什么,可以通过sudo fdisk -l查看
    bs是块大小,这里以64k是因为A2分区前面存放了4个冗余的64K容量的preloader。然后seek为4,意思就是从A2分区开头,跳过64K *4=256K的空间,再写入。



    2.2.创建FAT文件系统与ext4文件系统
    在分区1(我们设置为“FAT”类型的分区)上创建FAT文件系统。

    1. sudo mkfs -t vfat /dev/loop14p1
    复制代码




    终端输入如下,在分区2创建ext4文件系统。也就是后面的根文件系统

    1. udo mkfs.ext4 /dev/loop14p2
    2. mke2fs 1.45.5 (07-Jan-2020)
    3. Discarding device blocks: done                           
    4. Creating filesystem with 1572864 4k blocks and 393216 inodes
    5. Filesystem UUID: 88309e43-7e1e-4838-a9aa-c7e56a6a8ef2
    6. Superblock backups stored on blocks:
    7.         32768, 98304, 163840, 229376, 294912, 819200, 884736

    8. Allocating group tables: done                           
    9. Writing inode tables: done                           
    10. Creating journal (16384 blocks): done
    11. Writing superblocks and filesystem accounting information: done

    复制代码



    此时Ubuntu系统可能会自己自动挂载已经识别的fat和ext4分区到系统,可以在图形界面下看到了


    用cp命令将fat分区下需要的文件(提前准备好)u-boot.img、u-boot.scr、soc_system.dtb、soc_system.rbf拷贝到fat分区下,也可以图形界面直接操作

    1. cp u-boot.img  u-boot.scr  soc_system.dtb  soc_system.rbf  /home/fpgaer/F5B6-A9BC
    复制代码


    使用sync命令同步

    1. sync
    复制代码


    拷贝准备好的文件系统到ext4分区

    注意:拷贝文件系统需要保持所有文件属性,若直接用cp复制,不带-p参数,会导致文件属性丢失,导致系统最终起不来。
    可以使用cp -nrp命令或者rsync命令完成文件带属性的拷贝

    1. rsync [选项] 源文件或目录 目标文件或目录
    复制代码


    例如,将本地目录/local/dir/同步到远程服务器的/remote/dir/:

    1. rsync -avz /local/dir/ user@remotehost:/remote/dir/
    复制代码


    使用cp命令

    1. cp -rp /data/project/ /backup/project/
    复制代码



    完事后,卸载镜像

    1. sudo losetup -d /dev/loop14
    复制代码



    插入sd卡,使用dd命令将img文件烧入sd卡中

    1. sudo dd if=sd.img of=/dev/sdc bs=2048
    复制代码

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-11-21 14:37 , Processed in 0.122426 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表