This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

General problems with LINUXEZSDK-AM335x v07.00 and TMDSSK3358



Ok I got my new TMDSSK3358 EVMSK board and I'm trying to get up and going with development and I'm utterly failing. I've downloaded and installed LINUXEZSDK-AM335x SDK v07.00 and read through the quick start guides and the Sitara Linux Training "Hands on with the SDK" lab and so far I've been unable to get anything to work properly. 

To start with the board did come up and run properly with the linux microSD card that was shipped with it.

Also if I run the SDK/bin/create_sdcard.sh script and have it load the pre-built images it mostly runs. I say mostly runs because the Matrix application runs and I can interact with it via the touch screen but the Ethernet ports will not work, they will not obtain an IP address via DHCP and even if I manually assign an IP address they will not communicate with any other IP address on the network. So I don't know what's wrong here.

I've also attempted to run the SDK/setup.sh script to setup for TFTP and NFS boot and failed.
The first problem I ran into appears to be the same issue described here http://e2e.ti.com/support/arm/sitara_arm/f/791/t/241286.aspx, i.e. apparently my Belkin N150 router is advertising it'self as a TFTP server, when it's not, and u-boot is taking it's word for it and overwriting the serverip variable that is set in uEnv.txt. To fix this I had to hand edit uEnv.txt to the following: 

serverip=192.168.12.110
rootpath=/home/dev/ti-sdk-am335x-evm-07.00.00.00/targetNFS
bootfile=zImage-am335x-evm.bin
ip_method=dhcp
tftp_nfs_boot=run findfdt; setenv autoload no;dhcp; tftp ${loadaddr} 192.168.12.110:zImage-am335x-evm.bin; run findfdt; tftp ${fdtaddr} 192.168.12.110:${fdtfile};  run netargs; bootz ${loadaddr} - ${fdtaddr}
uenvcmd=run tftp_nfs_boot

The next problem I ran into with NFS boot appeared to have to do with the u-boot.img and MLO files on the provided SD card not matching the kernel that the v07.00 SDK ships with. This was solved by running the SDK/bin/create-sdcard.sh script and having it re-partition and format the SD card and install the correct version of these files.

Finally the current problem I'm having with NFS boot is the kernel gets stuck during boot up trying to get a DHCP response. A couple of seconds after booting I see the following messages:

[    3.806252] libphy: 4a101000.mdio:00 - Link is Up - 100/Full
[    3.845344] Sending DHCP requests ......[   60.325733] PM: request_firmware failed
 timed out!
[   87.781228] IP-Config: Retrying forever (NFS root)...
[   87.786681] net eth0: initializing cpsw version 1.12 (0)
[   87.795398] net eth0: phy found : id is : 0x4dd074
[   87.804892] 8021q: adding VLAN 0 to HW filter on device eth0
[   87.811183] net eth1: initializing cpsw version 1.12 (0)
[   87.819902] net eth1: phy found : id is : 0x4dd074
[   87.828465] 8021q: adding VLAN 0 to HW filter on device eth1
[   89.796239] libphy: 4a101000.mdio:00 - Link is Up - 100/Full
[   89.825332] Sending DHCP requests ...... timed out!
[  165.901208] IP-Config: Retrying forever (NFS root)...
[  165.906659] net eth0: initializing cpsw version 1.12 (0)
[  165.915343] net eth0: phy found : id is : 0x4dd074
[  165.924801] 8021q: adding VLAN 0 to HW filter on device eth0
[  165.931088] net eth1: initializing cpsw version 1.12 (0)
[  165.939825] net eth1: phy found : id is : 0x4dd074
[  165.948380] 8021q: adding VLAN 0 to HW filter on device eth1
[  167.916229] libphy: 4a101000.mdio:00 - Link is Up - 100/Full
[  167.945332] Sending DHCP requests ...... timed out!

This sequence of messages just repeats itself over and over again, and it doesn't seem to matter which Ethernet port is plugged in or if I'm using my Belkin router or running a DHCP server on my development machine. 

So what should I do?
Should I try dropping back to v06 or v05 of the SDK? 

I should also say that I've tried to build the SDK and install that but I'm really confused here as to which files are biult and which files go where and which make targets do what, for instance:

For instance what does 'make install' do?

There is the targetNFS directory which I presume is for NFS boot what about non-NFS boot where do the final image files get placed? 

Thanks in advance for any help that you can provide,
Matt S. 

  • It's a bug in the SDK 7.0 kernel. See this thread. As you'll have to recompile the kernel anyway, you could start with vanilla kernel 3.15-rc3 or better rc-4, when it will released next week and help test it.

  • Thank you for the info. 

    I did try SDK 6.0 and it worked but at this point I'm not opposed to learning how to work with the newer stuff just to see where it takes me.

    Is there any info on where and how to obtaining and test the new kernel? I assume that it needs to come from some TI git repo, or is it really as simple as getting the mainline 3.15 kernel source?

  • Yes, you just need to clone this repo:

    git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

    Then setup ARCH and CROSS_COMPILE

    To compile both zImage and DTB execute:

    make omap2plus_defconfig

    make menuconfig (you'll have to activate some drivers, that are not enabled by default like USB stuff, try to take the config from SDK 7.0 first for example or use omap2plus_defconfig and enable needed config options)

    make -j4 zImage am335x-evmsk.dtb LOADADDR=0x80200000

    You'll get following files, that should place into /boot/ folder of your root file system partition:

    arch/arm/boot/zImage

    arch/arm/boot/dts/am335x-evmsk.dtb

    Further info:

    very good overview of device tree: http://elinux.org/images/a/a3/Elce2013-petazzoni-devicetree-for-dummies.pdf

    FIT image infor: http://elinux.org/images/f/f4/Elc2013_Fernandes.pdf

  • Thank you for the detailed information. 

    I noticed that SDK 7.00.00 is cloned from git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git (tag ti2013.12.01)

    What is the difference between this git clone and the one from kernel.org? I noticed that there is a ti-linux-3.15.y branch on the git.ti.com repo, is that a branch I should be following? 

    rfc2217 I really appreciate you responding to my questions. I've been reading a ton and I'm still more than a little confused by all the various repos, feature trees, projects (Argo, yocto, Angstrom), etc. and how to go about setting up my own project. There are all kinds of "how to's" and "getting started" wiki's  but most of them are just about how to build the software and add features, few talk about the nitty gritty of how to setup a project in your organizations own Git servers and keep your changes separate or at least straight from the kernel source. 

    Thanks again

    Matt S. 

  • I personally prefer to use vanilla kernel or linux-omap, because it has the patches, that will go into the next kernel. Vanilla kernel supports almost everything, that you have on am335x-evmsk.

    As to embedded Linux distro I have the most experience with Buildroot. Read this on how to keep your project separate from Buildroot itself.

  • Thank you things are becoming clearer and I do like the looks of BuildRoot. Also I found some posts on how to import the kernel source into my own gitlab server and still have a path for merging in mainline changes.
    e.g. http://stackoverflow.com/questions/10626946/how-to-mirror-the-official-linux-kernel-tree-in-a-private-gitolite-server
    I really don't like digging to far into something without understanding how I'm going to manage it. 

    I do have one question, your instructions (and it looks like the top level TI makefile does this) are for building zImage and placing zImage in the /boot directory, however many of the how to's and much of the documentation talk about uImage (generated from the mkimage tool) being required to boot the kernel from U-Boot, am I missing something or is that requirement gone? 

    Thanks,

    Matt S. 

  • There is an alternative to maintaining a kernel git tree. If you don't have a lot of patches (with 3.15 and device tree approach you shouldn't have a lot of patches) you can just store them in a repository. Especially if you use Buildroot and its BR2_EXTERNAL feature, you just create board/vendor/linux-x.x.x folder per kernel and store the patches there. In main BR config you just specify the stable kernel version and path to the folder with patches. It will save you a lot of space and perhaps time, when you're moving git kernel trees.

    About uImage vs zImage read this thread.