Please note as of Wednesday, August 15th, 2018 this wiki has been set to read only. If you are a TI Employee and require Edit ability please contact x0211426 from the company directory.

FAQ for DaVinci Linux

From Texas Instruments Wiki
Jump to: navigation, search

This is a collection of DaVinci open source Linux frequently asked questions (FAQ). They are mainly collected from DaVinci open source mailing list.

No kernel output after U-Boot load

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

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

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

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

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

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

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

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:

  1. 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

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.