[U-Boot] Login to Linux system over LCD console on Raspberry Pi.

Martin Orgonas anymor1024 at gmail.com
Fri Nov 20 08:52:54 CET 2015


Hello,

I have Raspberry Pi Model B+ V1.2.
I would like to use official Raspbian OS with U-Boot.
When Raspberry Pi turn on then U-Boot starts and run Raspbian kernel.img.
But i do not have anything kernel boot message on LCD monitor. Every
messages are send to serial port (UART -> RS232) to the serial console.
After Raspbian is started, I can login to system only via serial console or
ethernet. Possibility for login to system via keyboard and LCD/monitor
console is missing.
How can I enable login to system over console on LCD with keyboard
connected and How can I enable kernel boot message to LCD?

My procedure for usin U-Boot with Raspberry Pi Model B+ V1.2
Step 01: Download Raspbian Jessie zip file [
https://downloads.raspberrypi.org/raspbian_latest] with SD card image and
make SD card with this image.
         Homepage for download: [
https://www.raspberrypi.org/downloads/raspbian/].
         Kernel version: 4.1.7+ (via uname -r)
         Default boot: boot to X-Windows (Desktop autologin) - Can I change
boot to console via raspi-config, but I left default settings.

Step 02: Download toolchain for cross compilation for Raspberry Pi [git
clone https://github.com/raspberrypi/tools] and configure PATH.

Step 03. Download U-Boot project [git clone git://git.denx.de/u-boot.git]
and compile it:
            make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rpi_defconfig
            make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

Step 04: Copy compiled u-boot.bin to Raspbian Jessie SD card.
         Add line kernel=u-boot.bin to end of file /boot/config.txt on
Raspbian Jessie SD card.

Step 05: After restart my Raspberry Pi run U-Boot and then I print some
information about device:
         * Over terminal with serial console I print U-Boot environment:
            U-Boot> printenv
            arch=arm
            baudrate=115200
            board=rpi
            board_name=Model B+
            board_rev=0x10
            boot_a_script=load ${devtype} ${devnum}:${distro_bootpart}
${scriptaddr} ${prefix}${script}; source ${scriptaddr}
            boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart}
any ${scriptaddr} ${prefix}extlinux/extlinux.conf
            boot_prefixes=/ /boot/
            boot_script_dhcp=boot.scr.uimg
            boot_scripts=boot.scr.uimg boot.scr
            boot_targets=mmc0 usb0 pxe dhcp
            bootcmd=run distro_bootcmd
            bootcmd_dhcp=usb start; if dhcp ${scriptaddr}
${boot_script_dhcp}; then source ${scriptaddr}; fi
            bootcmd_mmc0=setenv devnum 0; run mmc_boot
            bootcmd_pxe=usb start; dhcp; if pxe get; then pxe boot; fi
            bootcmd_usb0=setenv devnum 0; run usb_boot
            bootdelay=2
            bootfile=boot.scr.uimg
            bootfstype=fat
            cpu=arm1176
            devnum=0
            devplist=1
            devtype=mmc
            distro_bootcmd=for target in ${boot_targets}; do run
bootcmd_${target}; done
            ethact=sms0
            fdt_addr_r=0x00000100
            fdtfile=bcm2835-rpi-b-plus.dtb
            kernel_addr_r=0x01000000
            loadaddr=0x00200000
            mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run
scan_dev_for_boot_part; fi
            pxefile_addr_r=0x00100000
            ramdisk_addr_r=0x02100000
            scan_dev_for_boot=echo Scanning ${devtype}
${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run
scan_dev_for_extlinux; run scan_dev
            _for_scripts; done
            scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable
devplist; env exists devplist || setenv devplist 1; for distro_bootpart in
${devplist}
            ; do if fstype ${devtype} ${devnum}:${distro_bootpart}
bootfstype; then run scan_dev_for_boot; fi; done
            scan_dev_for_extlinux=if test -e ${devtype}
${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo
Found ${prefix}extlinux/extlinux.c
            onf; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
            scan_dev_for_scripts=for script in ${boot_scripts}; do if test
-e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo
Found U-Boot s
            cript ${prefix}${script}; run boot_a_script; echo SCRIPT
FAILED: continuing...; fi; done
            scriptaddr=0x02000000
            soc=bcm283x
            stderr=serial,lcd
            stdin=serial,lcd
            stdout=serial,lcd
            usb_boot=usb start; if usb dev ${devnum}; then setenv devtype
usb; run scan_dev_for_boot_part; fi
            usbethaddr=b8:27:eb:16:c4:8a
            vendor=raspberrypi

            Environment size: 2304/16380 bytes

          * U-Boot board info structure:
              U-Boot> bdinfo
              arch_number = 0x00000C42
              boot_params = 0x00000100
              DRAM bank   = 0x00000000
              -> start    = 0x00000000
              -> size     = 0x1C000000
              eth0name    = sms0
              ethaddr     = (not set)
              current eth = sms0
              ip_addr     = <NULL>
              baudrate    = 115200 bps
              TLB addr    = 0x1BFF0000
              relocaddr   = 0x1BF4D000
              reloc off   = 0x1BF45000
              irq_sp      = 0x1BB48ED0
              sp start    = 0x1BB48EC0
              FB base     = 0x5E97A000

          * U-Boot print console devices and information:
              U-Boot> coninfo
              List of available devices:
              serial_pl01x 00000003 .IO
              lcd      00000002 ..O stdout stderr
              serial   80000003 SIO stdin

          * U-Boot print header information for application image
              U-Boot> iminfo

              ## Checking Image at 02000000 ...
              Unknown image format!

Step 06: Configure some U-Boot environments:
          * Setting boot only from SD card
              U-Boot> setenv boot_targets "mmc0"
          * Setting kernel arguments (copy from /boot/cmdline.txt from SD
card)
              U-Boot> setenv bootargs "dwc_otg.lpm_enable=0
console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
elevator=deadline fsck.repair=yes rootwait"
          * Save U-Boot environment changes
              U-Boot> saveenv
          * Restart Raspberry Pi device
              U-Boot> reset

Step 07: Run Raspbian Jessie kernel.img
          * U-Boot start screen from serial console:
              U-Boot 2015.10-00317-g446d37c (Nov 19 2015 - 09:51:55 +0100)

              DRAM:  448 MiB
              RPI Model B+
              MMC:   bcm2835_sdhci: 0
              reading uboot.env
              In:    serial
              Out:   lcd
              Err:   lcd
              Net:   Net Initialization Skipped
              No ethernet found.
              Hit any key to stop autoboot:  0
              switch to partitions #0, OK
              mmc0 is current device
              Scanning mmc 0:1...
              U-Boot>

          * Load kernel into the memory from serial console:
              U-Boot> fatload mmc 0:1 ${kernel_addr_r} kernel.img
              reading kernel.img
              4056224 bytes read in 280 ms (13.8 MiB/s)

          * Run Linux zImage image from memory from serial console:
              U-Boot> bootz ${kernel_addr_r}

Result:
  * Linux kernel boot message are shows only serial console:
      Net:   Net Initialization Skipped
      No ethernet found.
      Hit any key to stop autoboot:  0
      switch to partitions #0, OK
      mmc0 is current device
      Scanning mmc 0:1...
      U-Boot> fatload mmc 0:1 ${kernel_addr_r} kernel.img
      reading kernel.img
      4056224 bytes read in 280 ms (13.8 MiB/s)
      U-Boot>
      U-Boot> bootz ${kernel_addr_r}
      Kernel image @ 0x1000000 [ 0x000000 - 0x3de3a8 ]

      Starting kernel ...

      Uncompressing Linux... done, booting the kernel.
      [    0.000000] Booting Linux on physical CPU 0x0
      [    0.000000] Initializing cgroup subsys cpuset
      [    0.000000] Initializing cgroup subsys cpu
      [    0.000000] Initializing cgroup subsys cpuacct
      [    0.000000] Linux version 4.1.7+ (dc4 at dc4-XPS13-9333) (gcc version
4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro
GCC 201
      4.03) ) #817 PREEMPT Sat Sep 19 15:25:36 BST 2015
      [    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7
(ARMv7), cr=00c5387d
      [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT
nonaliasing instruction cache
      [    0.000000] Machine: BCM2708
      [    0.000000] cma: Reserved 8 MiB at 0x1b800000
      [    0.000000] Memory policy: Data cache writeback
      [    0.000000] Built 1 zonelists in Zone order, mobility grouping
on.  Total pages: 113680
      [    0.000000] Kernel command line: dwc_otg.lpm_enable=0
console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
elevator=deadline fsc
      k.repair=yes rootwait
      [    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
      [    0.000000] Dentry cache hash table entries: 65536 (order: 6,
262144 bytes)
      [    0.000000] Inode-cache hash table entries: 32768 (order: 5,
131072 bytes)
      [    0.000000] Memory: 436552K/458752K available (6132K kernel code,
490K rwdata, 1780K rodata, 348K init, 720K bss, 14008K reserved, 8192K
cma-reserv
      ed)
      [    0.000000] Virtual kernel memory layout:
      =======> and other kernel boot messages...

  * LCD monitor shows only this lines:
      Net:   Net Initialization Skipped
      No ethernet found.
      Hit any key to stop autoboot:  0
      switch to partitions #0, OK
      mmc0 is current device
      Scanning mmc 0:1...
      U-Boot> fatload mmc 0:1 ${kernel_addr_r} kernel.img
      reading kernel.img
      4056224 bytes read in 280 ms (13.8 MiB/s)
      U-Boot>
      U-Boot> bootz ${kernel_addr_r}
      Kernel image @ 0x1000000 [ 0x000000 - 0x3de3a8 ]

      Starting kernel ...
      =======> no other messages

  * I can login only via serial console or ethernet.

  * I would like login to Raspberry device via keyboard connecetd to
Raspberry device with LCD/monitor console.
    But I can not login, because LCD/monitor console is missing.

How can I enable login to system over console on LCD with keyboard
connected?
How can I enable kernel boot message to LCD?

I tried:
- U-Boot setenv silent 1
- U-Boot source define in u-boot/include/configs/rpi-common.h
    CONFIG_SILENT_CONSOLE
    CONFIG_SYS_DEVICE_NULLDEV
    CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC
- U-Boot environment stderr, stdin, stdout
- I tried Stephen Warren U-Boot
    I replaced [git clone git://git.denx.de/u-boot.git] from Step 03 to
[git clone git://github.com/swarren/u-boot.git --branch rpi_dev]
- I tried Sunxi U-Boot
    I replaced [git clone git://git.denx.de/u-boot.git] from Step 03 to
[git clone https://github.com/linux-sunxi/u-boot-sunxi.git]
But still i do not console on LCD monitor.

Please help me.

Thank you very much.


More information about the U-Boot mailing list