NOTICE: The Processors Wiki will End-of-Life on January 15, 2021. It is recommended to download any files or other content you may need that are hosted on processors.wiki.ti.com. The site is now set to read only.
FAQ for DaVinci Linux
This is a collection of DaVinci open source Linux frequently asked questions (FAQ). They are mainly collected from DaVinci open source mailing list.
Contents
No kernel output after U-Boot load[edit]
Q: I compiled (new) kernel and started it by (new) U-Boot on a (new) board and I get no output after U-Boot copied the kernel to RAM and jumped to it:
## Booting image at 83000000 ... Image Name: Linux-2.6.23-rc3-davinci1 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1434276 Bytes = 1.4 MB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK OK Starting kernel ... <nothing, no output>
A: The kernel uncompression code is probably not writing to your serial port. Edit arch/arm/mach-davinci/include/mach/uncompress.h to refer to your UART instead of UART2 (the default).
No output after uncompressing kernel[edit]
Q: I get past the kernel uncompressing part but I still get no output after that:
## Booting image at 83000000 ... Image Name: Linux-2.6.23-rc3-davinci1 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1434276 Bytes = 1.4 MB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK OK Starting kernel ... Uncompressing Linux............................................................. ................................. done, booting the kernel. <nothing, no output>
A: Enable
Kernel hacking -> Kernel debugging -> Kernel low-level debugging functions
in Kernel configuration. Drop a printascii() in printk() and see where it hangs.
Enable debug output without kernel recompile[edit]
Q: I want to enable kernel debugging, but I don't want (I'm not able) to recompile the kernel. Is there an other way to enable kernel low level debugging output?
A: Instead of above Kernel hacking -> Kernel debugging -> Kernel low-level debugging functions you can try to reconfigure serial console at kernel command line. If you use e.g. U-Boot to pass kernel parameters, you can try to replace
... console=/dev/ttyS0,115200n8 ...
with
... console=uart,io,0xe1020000,115200n8 ...
Note: Once the kernel boots fine, you must change the console definition back to the standard value, otherwise the kernel will have a conflict when reserving the memory location again for the ttyS0.
Error a[edit]
Q: I enabled low-level debugging function like described above and then get
Linux............................................................. ................................. done, booting the kernel. Error a
A: "a" stands for "architecture". This means that U-Boot passes the wrong architecture machine number in processor register r1 to kernel. U-Boot and Kernel machine numbers don't match. For possible solutions see below.
Wrong machine number I[edit]
Q: My (old/new) U-Boot doesn't start my (new/old) Linux kernel correctly, because the machine number passed by U-Boot to the kernel don't match kernels one.
A: Correct your U-Boot and/or Linux kernel to use matching machine numbers.
Wrong machine number II[edit]
Q: My (old/new) U-Boot doesn't start my (new/old) Linux kernel correctly, because the machine numbers don't match. I don't want to correct machine numbers. What else can I do?
A: Try hackish patch to disable machine number in kernel.
Machine numbers[edit]
Q: What are these machine numbers this FAQ talks about above?
A: See Machine numbers and machine number registry. Machine number is compiled into U-Boot and passed by register to Linux kernel. Linux kernel has machine number compiled in as well. Both machine numbers have to match, else kernel won't boot.
Build Instructions for U-boot[edit]
Q:How do I build U-Boot for DaVinci technology-based processors?
A:If you do not already have the u-boot source code, you can get it from our DaVinci Software Update Site available to registered DVEVM users.
https://www-a.ti.com/extranet/cm/product/dvevmsw/dspswext/general/homepage.shtml
Please make sure you have the version of u-boot source code that corresponds to the version of the DVEVM software release you are working with. Once you have the u-boot source code on your Linux host work-station, you can go to the top level directory in the u-boot source tree and execute the following three commands to build u-boot for DVEVM.
host % make mrproper
host % make davinci_config
host % make
The ‘make mrproper’ command is analogous to ‘make clean’ command; the ‘make davinci_config’ command sets up the necessary environment for u-boot to be built for DVEVM platform; finally, the ‘make’ command builds u-boot.
Q: How do I build NAND version of U-Boot for DaVinci™ technology-based processors?
A: Building NAND version of u-boot is very similar to building NOR (default) version of u-boot, except for one main difference. The main difference is that before you build NAND version of u-boot, you must edit:
$(UBOOT_ROOT_DIR)/include/configs/davinci.h
File and comment out the following line near the top of this file:
- define CFG_ENV_IS_IN_FLASH 1
This single line (uncommented by default) is what controls whether NOR or NAND version of u-boot gets built. After this, the process to build u-boot is the same; mainly, go to the top level root directory of the u-boot source tree and execute the following commands.
host % make mrproper
host % make davinci_config
host % make
Configuring more than 2 McASP serializers for Receive/Transmit[edit]
Multi-serializer mode is not supported Out of the box. Following modifications to the source code are required for it to work:
- Modify the serializer_direction structure in the board file to Receive/Transmit from the desired serializer.
- Make sure that pinmuxing for the serializers is handled correctly.
- Start Receive/Transmit for all the configured serializers by modifying the ASoC platform driver(McASP driver). DMA related modifications like configuring the DMA transfer lengths, should also be done inside the ASoC platform driver.