你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32h7-uboot-uclinux 移植完成部分,分享给大家

[复制链接]
stone-363407 发布时间:2018-11-22 15:29
本帖最后由 stone-363407 于 2018-12-7 16:42 编辑

代码地址: http://github.com/huayuguo/uboot-stm32h743_eth



U-Boot 2018.09-rc2-gc16d658 (Dec 06 2018 - 16:00:30 +0800)


Model: STMicroelectronics STM32H743i-EVAL board
DRAM:  32 MiB
MMC:   STM32 SDMMC2: 0
In:    serial@40011000
Out:   serial@40011000
Err:   serial@40011000
Net:   
Warning: ethernet@40028000 (eth0) using random MAC address - fe:f8:94:5f:5e:26
eth0: ethernet@40028000
Hit SPACE in 3 seconds to stop autoboot.
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
U-Boot > setenv gatewayip 192.168.10.1;setenv ipaddr 192.168.10.22;setenv netmask 255.255.255.0;setenv ethaddr  1a:5a:38:ef:38:d8;
U-Boot > env set bootargs "root=/dev/ram console=ttyS0,115200 "
U-Boot > tftpboot 61000000 192.168.10.25:uImage;tftpboot 61300000 192.168.10.25:stm32h743i-eval.dtb;
ethernet@40028000 Waiting for PHY auto negotiation to complete. done
Using ethernet@40028000 device
TFTP from server 192.168.10.25; our IP address is 192.168.10.22
Filename 'uImage'.
Load address: 0x61000000
Loading: #################################################################
         #################################################################
         ##########
         1.4 MiB/s
done
Bytes transferred = 2048568 (1f4238 hex)
ethernet@40028000 Waiting for PHY auto negotiation to complete. done
Using ethernet@40028000 device
TFTP from server 192.168.10.25; our IP address is 192.168.10.22
Filename 'stm32h743i-eval.dtb'.
Load address: 0x61300000
Loading: #
         999 KiB/s
done
Bytes transferred = 5115 (13fb hex)
U-Boot > bootm 61000000 - 61300000
## Booting kernel from Legacy Image at 61000000 ...
   Image Name:   linux
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2048504 Bytes = 2 MiB
   Load Address: 61000000
   Entry Point:  61000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 61300000
   Booting using the fdt blob at 0x61300000
   Loading Kernel Image ... OK
   Using Device Tree in place at 61300000, end 613043fa


Starting kernel ...


[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.15.2-gb37c1e299-dirty (xiao@xd) (gcc version 6.3.1 20170620 (15:6.3.1+svn253039-1build1)) #134 PREEMPT Fri Dec 7 13:45:02 CST 2018
[    0.000000] CPU: ARMv7-M [411fc271] revision 1 (ARMv7M), cr=00000000
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
[    0.000000] OF: fdt: Machine model: STMicroelectronics STM32H743i-EVAL board
[    0.000000] Reserved memory: created DMA memory pool at 0x61000000, size 2 MiB
[    0.000000] OF: reserved mem: initialized node linux,dma, compatible id shared-dma-pool
[    0.000000] Ignoring RAM after 0x61000000, memory at 0x61200000 ignored
[    0.000000] Using ARMv7 PMSA Compliant MPU. Region independence: No, Used 2 of 16 regions
[    0.000000] On node 0 totalpages: 4096
[    0.000000]   Normal zone: 32 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 4096 pages, LIFO batch:0
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0
[    0.000000] Built 1 zonelists, mobility grouping off.  Total pages: 4064
[    0.000000] Kernel command line: root=/dev/ram console=ttyS0,115200
[    0.000000] Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.000000] Memory: 13080K/16384K available (1596K kernel code, 154K rwdata, 496K rodata, 632K init, 130K bss, 3304K reserved, 0K cma-reserved)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0x00000000 - 0x00001000   (   4 kB)
[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
[    0.000000]     vmalloc : 0x00000000 - 0xffffffff   (4095 MB)
[    0.000000]     lowmem  : 0x60000000 - 0x61000000   (  16 MB)
[    0.000000]       .text : 0x(ptrval) - 0x(ptrval)   (1597 kB)
[    0.000000]       .init : 0x(ptrval) - 0x(ptrval)   ( 632 kB)
[    0.000000]       .data : 0x(ptrval) - 0x(ptrval)   ( 155 kB)
[    0.000000]        .bss : 0x(ptrval) - 0x(ptrval)   ( 131 kB)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000]  Tasks RCU enabled.
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] clocksource: arm_system_timer: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 18664651 ns
[    0.000000] ARM System timer initialized as clocksource
[    0.000000] /soc/timer@40000c00: STM32 clockevent driver initialized (32 bits)
[    0.000000] sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 21474836475000000ns
[    0.010000] Calibrating delay loop... 795.44 BogoMIPS (lpj=3977216)
[    0.100000] pid_max: default: 4096 minimum: 301
[    0.100000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.100000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.100000] Hierarchical SRCU implementation.
[    0.100000] devtmpfs: initialized
[    0.110000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.110000] pinctrl core: initialized pinctrl subsystem
[    0.110000] DMA: default coherent area is set
[    0.110000] random: get_random_u32 called from bucket_table_alloc+0xc9/0xf4 with crng_init=0
[    0.110000] NET: Registered protocol family 16
[    0.120000] cpuidle: using governor ladder
[    0.120000] cpuidle: using governor menu
[    0.130000] stm32h743-pinctrl soc:pin-controller: GPIOA bank added
[    0.130000] stm32h743-pinctrl soc:pin-controller: GPIOB bank added
[    0.130000] stm32h743-pinctrl soc:pin-controller: GPIOC bank added
[    0.130000] stm32h743-pinctrl soc:pin-controller: GPIOD bank added
[    0.130000] stm32h743-pinctrl soc:pin-controller: GPIOE bank added
[    0.130000] stm32h743-pinctrl soc:pin-controller: GPIOF bank added
[    0.140000] stm32h743-pinctrl soc:pin-controller: GPIOG bank added
[    0.140000] stm32h743-pinctrl soc:pin-controller: GPIOH bank added
[    0.140000] stm32h743-pinctrl soc:pin-controller: GPIOI bank added
[    0.140000] stm32h743-pinctrl soc:pin-controller: GPIOJ bank added
[    0.140000] stm32h743-pinctrl soc:pin-controller: GPIOK bank added
[    0.140000] stm32h743-pinctrl soc:pin-controller: Pinctrl STM32 initialized
[    0.160000] pps_core: LinuxPPS API ver. 1 registered
[    0.160000] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.160000] PTP clock support registered
[    0.160000] clocksource: Switched to clocksource arm_system_timer
[    0.170000] NET: Registered protocol family 2
[    0.170000] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[    0.170000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[    0.170000] TCP: Hash tables configured (established 1024 bind 1024)
[    0.170000] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.170000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.170000] NET: Registered protocol family 1
[    0.360000] workingset: timestamp_bits=30 max_order=12 bucket_order=0
[    0.380000] random: fast init done
[    0.400000] io scheduler noop registered
[    0.400000] io scheduler deadline registered
[    0.400000] io scheduler cfq registered (default)
[    0.400000] io scheduler mq-deadline registered
[    0.400000] io scheduler kyber registered
[    0.400000] STM32 USART driver initialized
[    0.400000] 40011000.serial: ttyS0 at MMIO 0x40011000 (irq = 17, base_baud = 12500000) is a stm32-usart
[    0.850000] console [ttyS0] enabled
[    0.850000] stm32-usart 40011000.serial: rx dma alloc failed
[    0.860000] stm32-usart 40011000.serial: interrupt mode used for rx (no dma)
[    0.870000] stm32-usart 40011000.serial: tx dma alloc failed
[    0.870000] stm32-usart 40011000.serial: interrupt mode used for tx (no dma)
[    0.880000] libphy: Fixed MDIO Bus: probed
[    0.890000] tun: Universal TUN/TAP device driver, 1.6
[    0.890000] stm32-dwmac 40028000.ethernet: Found phy-handle subnode
[    0.900000] stm32-dwmac 40028000.ethernet: Found MDIO subnode
[    0.910000] stm32-dwmac 40028000.ethernet: use snps,dwmac-4.00..
[    0.910000] stm32-dwmac 40028000.ethernet: PTP uses main clock
[    0.910000] stm32-dwmac 40028000.ethernet: no reset control found
[    0.930000] stmmac - user ID: 0x30, Synopsys ID: 0x41
[    0.930000] stm32-dwmac 40028000.ethernet: DMA HW capability register supported
[    0.930000] stm32-dwmac 40028000.ethernet: RX Checksum Offload Engine supported
[    0.950000] stm32-dwmac 40028000.ethernet: TX Checksum insertion supported
[    0.950000] stm32-dwmac 40028000.ethernet: Wake-Up On Lan supported
[    0.950000] stm32-dwmac 40028000.ethernet: TSO supported
[    0.970000] stm32-dwmac 40028000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[    0.970000] stmmac_mdio_reset : reset gpio direction num=28
[    1.080000] libphy: stmmac: probed
[    1.090000] stm32-dwmac 40028000.ethernet: register the MDIO bus
[    1.100000] u32 classifier
[    1.100000] Initializing XFRM netlink socket
[    1.110000] NET: Registered protocol family 17
[    1.110000] NET: Registered protocol family 15
[    1.110000] 8021q: 802.1Q VLAN Support v1.8
[    1.120000] Key type dns_resolver registered
[    1.130000] Freeing unused kernel memory: 632K
[    1.140000] This architecture does not have kernel memory protection.
can't run '/sbin/swapon': No such file or directory
Initializing random number generator... done.
Jan  1 00:00:01 login[59]: root login on 'console'
~ #
收藏 5 评论16 发布时间:2018-11-22 15:29

举报

16个回答
stone-363407 回答时间:2018-12-7 16:08:07
本帖最后由 stone-363407 于 2018-12-7 16:09 编辑

cpu 400Mhz  sdram 100mhz  cas=2
测试软件:iperf3
系统跑了25个线程测试速度如下。。。。没有原子裸奔的那个快............
65.8 Mbits/sec

~ # cat /proc/cpuinfo
processor       : 0
model name      : ARMv7-M rev 1 (v7ml)
BogoMIPS        : 795.44
Features        : half thumb fastmult edsp idivt
CPU implementer : 0x41
CPU architecture: 7M
CPU variant     : 0x1
CPU part        : 0xc27
CPU revision    : 1

Hardware        : STM32 (Device Tree Support)
Revision        : 0000
Serial          : 0000000000000000
~ # iperf3 -c 192.168.10.26
Connecting to host 192.168.10.26, port 5201
[  4] local 192.168.10.22 port 41328 connected to 192.168.10.26 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.01   sec  7.57 MBytes  63.0 Mbits/sec    0    173 KBytes      
[  4]   1.01-2.03   sec  8.22 MBytes  67.3 Mbits/sec    0    181 KBytes      
[  4]   2.03-3.15   sec  8.75 MBytes  66.0 Mbits/sec    0    181 KBytes      
[  4]   3.15-4.04   sec  6.90 MBytes  65.0 Mbits/sec    0    181 KBytes      
[  4]   4.04-5.15   sec  8.70 MBytes  65.4 Mbits/sec    0    181 KBytes      
[  4]   5.15-6.10   sec  7.40 MBytes  65.5 Mbits/sec    0    181 KBytes      
[  4]   6.10-7.01   sec  7.37 MBytes  67.7 Mbits/sec    0    191 KBytes      
[  4]   7.01-8.16   sec  8.95 MBytes  65.6 Mbits/sec    0    191 KBytes      
[  4]   8.16-9.02   sec  6.86 MBytes  66.5 Mbits/sec    0    191 KBytes      
[  4]   9.02-10.13  sec  8.73 MBytes  65.9 Mbits/sec    0    191 KBytes      
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.13  sec  79.4 MBytes  65.8 Mbits/sec    0             sender
[  4]   0.00-10.13  sec  79.4 MBytes  65.8 Mbits/sec                  receiver

iperf Done.
~ # ps
  PID USER       VSZ STAT COMMAND
    1 root       400 S    init
    2 root         0 SW   [kthreadd]
    4 root         0 IW<  [kworker/0:0H]
    6 root         0 IW<  [mm_percpu_wq]
    7 root         0 SW   [ksoftirqd/0]
    8 root         0 IW   [rcu_preempt]
    9 root         0 IW   [rcu_sched]
   10 root         0 IW   [rcu_bh]
   11 root         0 SW   [kdevtmpfs]
   12 root         0 SW   [rcu_tasks_kthre]
   14 root         0 IW<  [writeback]
   15 root         0 IW<  [crypto]
   16 root         0 IW<  [kblockd]
   17 root         0 IW<  [watchdogd]
   18 root         0 SW   [kswapd0]
   41 root         0 SW   [irq/17-40011000]
   59 root       420 S    -sh
   60 root         0 IW   [kworker/u2:1]
   61 root         0 IW   [kworker/u2:2]
   64 root         0 IW   [kworker/0:2]
   65 root         0 IW   [kworker/0:3]
   71 root         0 IW   [kworker/0:0]
   75 root       396 R    ps
yhangzzz 回答时间:2019-3-7 20:20:51
本帖最后由 yhangzzz 于 2019-3-7 20:26 编辑

楼主,您好,看了您的贴子,手头正好有一块stm32f746-disco 的板子,按照您的思路,移植了uboot2016.09,移植了uboot eth驱动,因为没有移植MMC驱动,就打算把linux内核加载在SDRAM上,再从SDRAM启动内核;使用的是linux4.19.24默认的stm32配置,但是现在一直卡在“Starting kernel ...”,内核应该是没有起来;不知道您调试过程中是否遇到这个问题。附上打印的信息:

U-Boot 2016.09-g83ec55b-dirty (Feb 22 2019 - 18:30:58 +0800)

DRAM:  8 MiB
WARNING: Caches not enabled
Flash: 1 MiB
Using default environment

In:    serial_stm32x7
Out:   serial_stm32x7
Err:   serial_stm32x7
Net:   
stm32 eth probe start
stm32 eth probe end
stm32_read_rom_hwaddr

Warning: eth_stm32_eth using MAC address from ROM
eth0: eth_stm32_eth
stm32_write_hwaddr

Hit SPACE in 3 seconds to stop autoboot.
U-Boot > set ipaddr 10.0.0.2
U-Boot > set serverip 10.0.0.6
U-Boot > tftp c0400000 uImage.bin

stm32_eth_stop start
stm32_eth_stop end

stm32_eth_start start
stm32_eth_start end
Using eth_stm32_eth device
TFTP from server 10.0.0.6; our IP address is 10.0.0.2
Filename 'uImage.bin'.
Load address: 0xc0400000
Loading: #################################################################
         ###########################
         2 MiB/s
done
Bytes transferred = 1337888 (146a20 hex)

stm32_eth_stop start
stm32_eth_stop end
U-Boot > tftp c0600000 discodtb.bin

stm32_eth_stop start
stm32_eth_stop end

stm32_eth_start start
stm32_eth_start end
Using eth_stm32_eth device
TFTP from server 10.0.0.6; our IP address is 10.0.0.2
Filename 'discodtb.bin'.
Load address: 0xc0600000
Loading: ##
         966.8 KiB/s
done
Bytes transferred = 14858 (3a0a hex)

stm32_eth_stop start
stm32_eth_stop end
U-Boot > bootm c0400000 - c0600000
## Booting kernel from Legacy Image at c0400000 ...
   Image Name:   Linux-4.19.24
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1337824 Bytes = 1.3 MiB
   Load Address: c0008000
   Entry Point:  c0008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at c0600000
   Booting using the fdt blob at 0xc0600000
   Loading Kernel Image ... OK
   Loading Device Tree to c07c7000, end c07cda09 ... OK

Starting kernel ...

stone-363407 回答时间:2018-11-25 11:03:43
eth 刚刚测试完成,只移植了UBOOT下的eth

U-Boot 2018.09-rc2-g36b739b (Nov 25 2018 - 10:45:48 +0800)

Model: STMicroelectronics STM32H743i-EVAL board
DRAM:  32 MiB
MMC:   STM32 SDMMC2: 0
In:    serial@40011000
Out:   serial@40011000
Err:   serial@40011000
Net:   
Warning: ethernet@40028000 (eth0) using random MAC address - b6:1d:0e:15:99:e3
eth0: ethernet@40028000
Hit SPACE in 3 seconds to stop autoboot.
Card did not respond to voltage select!
U-Boot > tftpboot 0x60001000 192.168.1.103:u-boot.bin
ethernet@40028000 Waiting for PHY auto negotiation to complete... done
*** ERROR: `ipaddr' not set
U-Boot > set ipaddr 192.168.1.101;set serverip 192.168.1.1;set ethaddr d6:54:97:9f:9a:90;
U-Boot > tftpboot 0x60001000 192.168.1.103:u-boot.bin
ethernet@40028000 Waiting for PHY auto negotiation to complete... done
Using ethernet@40028000 device
TFTP from server 192.168.1.103; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x60001000
Loading: ##################
         1.8 MiB/s
done
Bytes transferred = 257336 (3ed38 hex)
U-Boot > cmp.b 60001000 8000000 3ed38
Total of 257336 byte(s) were the same

接下来看看kernel 咋能。

说下eth dma 最大的注意事项,就是cache dma  ram  一致性,  卡了好个晚上,对于这个一致性,没有多少经验,希望大家给点经验指导下。
mzy2364 回答时间:2018-11-22 15:43:47
赞,这个厉害
andey 回答时间:2018-11-22 16:45:58
提示: 作者被禁止或删除 内容自动屏蔽
stone-363407 回答时间:2018-12-7 16:12:46
另外附上 uboot 下SD卡的速度

switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
U-Boot > fatload mmc 0 60008000 uImage;fatload mmc 0 60800000 stm32h743i-eval.dtb
1926672 bytes read in 19 ms (96.7 MiB/s)
9370 bytes read in 2 ms (4.5 MiB/s)
U-Boot >
STMWoodData 回答时间:2018-12-7 16:25:35
提示: 作者被禁止或删除 内容自动屏蔽
stone-363407 回答时间:2018-12-19 14:42:14
6#数据因为timer 不对所以数据不对 抱歉!!!
3111272 回答时间:2019-3-8 08:58:55
厉害厉害
stone-363407 回答时间:2019-3-12 21:14:54
yhangzzz 发表于 2019-3-7 20:20
楼主,您好,看了您的贴子,手头正好有一块stm32f746-disco 的板子,按照您的思路,移植了uboot2016.09,移 ...

请查看串口定义部分 高版本内核串口的定义不一样 ttys0 具体看下驱动代码
stone-363407 回答时间:2019-3-12 21:53:59
本帖最后由 stone-363407 于 2019-3-12 21:57 编辑
yhangzzz 发表于 2019-3-7 20:20
楼主,您好,看了您的贴子,手头正好有一块stm32f746-disco 的板子,按照您的思路,移植了uboot2016.09,移 ...

看下这个如果你用的内核版本是这样
git\linux-4.19.9\drivers\tty\serial\stm32-usart.h

#define _SERIAL_NAME "ttySTM"
把这个    U-Boot > env set bootargs "root=/dev/ram console=ttyS0,115200 "


改成这个


env set bootargs "root=/dev/ram console=ttySTM,115200 "



这个STM工程师比较那个,我也被坑了,各种分析,内存BUFF分析 等等 我就像骂一句 mmp
stary666 回答时间:2019-3-12 22:18:05
太牛了,,,,,,
yhangzzz 回答时间:2019-3-15 09:01:25
stone-363407 发表于 2019-3-12 21:53
看下这个如果你用的内核版本是这样
git\linux-4.19.9\drivers\tty\serial\stm32-usart.h

谢楼主啊,我回头试一下
yhangzzz 回答时间:2019-3-15 11:25:50
stone-363407 发表于 2019-3-12 21:53
看下这个如果你用的内核版本是这样
git\linux-4.19.9\drivers\tty\serial\stm32-usart.h

楼主您好,linux内核确实是你说的那样,但是改了uboot的bootargs后,仍然不能在启动内核后打印信息。。。stm的工程师看来是只管写不管有没有用啊。。。
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版