[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