Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Jul 2017 20:19:54 -0700
From:      Russell Haley <russ.haley@gmail.com>
To:        freebsd-arm <freebsd-arm@freebsd.org>
Subject:   Re: BBB & IMX6 Hummingboard SDIO driver
Message-ID:  <CABx9NuS89JcgzMkO0tq8gLFP64Rt3R-y3esaXHGu0%2BdW9XSU9A@mail.gmail.com>
In-Reply-To: <CABx9NuR-ahQ3-PF2DV_6zAzMdFKhkyCt0b8%2BcyQ1KDBcaYHU=g@mail.gmail.com>
References:  <CABx9NuR-ahQ3-PF2DV_6zAzMdFKhkyCt0b8%2BcyQ1KDBcaYHU=g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Current Status:

Building and Installing - BBB
- Either the information about building a Beaglebone has fallen out of
date, or the beaglebone black has different requirements that should
be documented on that page. Boot pieces:
- MLO
-u-boot.img
-ubldr.bin

- The kernel I built yesterday panics during load due to a sleep lock
that has already been identified by kibab (aka Ilya). I will attempt
to patch it tomorrow.

hummingboard
- The u-boot port for cubox-hummingboard does not build from the
ports. It tries to fetch the 2013 source files and fails the checksum.
I pulled ports from svn and it builds correctly with u-boot 2017.

Source Code
The following is my examination of the code I can identify as
involving the new MMCCAM stack. I am reading first to understand how
the pieces fit and then will get into the details.

 - All mmccam functions for BBB sd cards is run through the sdhci
driver in /sys/dev/sdhci/sdhci.c which is extended by
arm/ti/ti_sdhci.c. When a custom kernel configuration is used, the
MMCCAM flag is specified and the MMCCAM specific code is compiled into
/sys/dev/sdhci/sdhci.c and .h.
 - There seems to be a implementation specific startup routine
compiled into the arm/ti/ti_sdhci.c using an ifdef. There is also a
custom read and write defined so I assume there is some board specific
things that need adjusting. Need to look closer
 - sdhci code paths seem to directly use the cam_ccb and cam_sim
rather than call any mmc specific code. It seems the sdhci uses the
cam bus but not the mmc_sdio code, nore the cam_xpt_* code.
- Note: in /sys/dev/sdhci/sdhci.c the includes on lines 51 through 55
are duplicated in an ifdef MMCCAM at lines 1979 through 1985. Is that
intentional?

cam/mmc
- mmc_sdio seems to be it's own thing. It includes both the
cam_sim/cam_ccb and the cam_xpt_* headers but I don't know yet if it
uses both sets of functionality (code is still opaque to me).

Okay, back at it tomorrow. Ilya, Warner, if you're around at all I'd
love to get a state of the union from you.

Thanks,

Russ

On Tue, Jul 18, 2017 at 7:25 AM, Russell Haley <russ.haley@gmail.com> wrote:
> Well more EBK (error behind keyboard). In the end I STILL didn't read
> the entire command line in the
> wiki. I missed the -E parameter for sudo, which preserves the
> environment variables.
>
> Ian remembered that he once added something to the sudoers file, which
> got me to the next step, where I finally *saw* the missing sudo parameter
> when reading the wiki entry for buildkernel. His more permanent
> solution is to add a line via
> visudo:
>
> Defaults env_keep += "MAKEOBJDIRPREFIX MODULES_OVERRIDE SUBDIR_OVERRIDE"
>
> which preserves the required variable of MAKEOBJDIRPREFIX.
>
> He explains the other variables:
> The other two vars are because I sometimes do a sudo make install with
> SUBDIR_OVERRIDE= or MODULES_OVERRIDE= to get a quick partial install
>
> Final build instructions:
>
> *NOTE: My output all says hummingboard because I thought I was going
> to build for that board first. I changed my mind at the last minute
> and built for my BBB. I'm cross building on amd64 to a BBB.
>
> setenv BASEDIR `pwd`
> setenv MAKEOBJDIRPREFIX $BASEDIR/obj
> cd $BASEDIR/src
>
> svn checkout https://svn0.us-west.FreeBSD.org/base/head .
>
>
> mkdir /mnt/memdisk
> mkdir /mnt/uboot
>
> truncate -s 1100M bbb.img #I think... I used 2048 because 1024 failed
> sudo mdconfig -f bbb.img
>
> gpart create -s mbr md0
> gpart add -t fat32 -b 1M -s 50M md0
> sudo newfs_msdos -F16 /dev/md0s1
> gpart add -t freebsd md0
> sudo newfs /dev/md0s2
>
>
> make TARGET_ARCH=armv6 -j10 buildworld
> make TARGET_ARCH=armv6 KERNCONF=BEAGLEBONE-MMCCAM -j10 buildkernel
>
> sudo mount_msdosfs /dev/md0s1 /mnt/uboot/
> sudo mount /dev/md0s2 /mnt/memdisk/
>
> #The -E is very important. It preserves the environment for sudo
> sudo -E make TARGET_ARCH=armv6 DESTDIR=/mnt/memdisk installworld distribution
> sudo -E make installkernel  TARGET_ARCH=armv6
> KERNCONF=BEAGLEBONE-MMCCAM DESTDIR=/mnt/memdisk
>
> cp ~/FreeBSD/hummingboard/obj/arm.armv6/usr/home/russellh/FreeBSD/hummingboard/src/sys/boot/arm/uboot/ubldr
> /mnt/uboot
>
> #
> cd ~/FreeBSD/hummingboard/obj/arm.armv6/usr/home/russellh/FreeBSD/hummingboard/src
> ~/FreeBSD/hummingboard/obj/arm.armv6/usr/home/russellh/FreeBSD/hummingboard/src%
> cp ./sys/BEAGLEBONE-MMCCAM/modules/usr/home/russellh/FreeBSD/hummingboard/src/sys/modules/dtb/am335x/am335x-boneblack.dtb
>  /mnt/uboot/
>
>
> cd /usr/ports/sysutils/u-boot-beaglebone/
>
> make
>
> cp work/u-boot-ports-v2017.01.00.2/MLO /mnt/uboot
> cp work/u-boot-ports-v2017.01.00.2/u-boot.img /mnt/uboot
>
> sudo umount /dev/md0s1
> sudo umount /dev/md0s2
> sudo mdconfig -du md0
>
> sysctl kern.geom.debugflags=16
> dd if=bbb.img of=/dev/da5 bs=4096k
>
> total ufs size used: 948M
>
> Thanks!
> Russ
>
> Now I need to find those silly little pins for the fdt cable. lolz
>
> On Mon, Jul 17, 2017 at 5:15 PM, Russell Haley <russ.haley@gmail.com> wrote:
>> Sorry, I'm going to take the TARGET out and try again. It's not in the
>> wiki entry for cross building.
>>
>> On Mon, Jul 17, 2017 at 1:57 PM, Russell Haley <russ.haley@gmail.com> wrote:
>>> My installworld is failing?
>>>
>>> Steps so far:
>>> #Make a memdisk to speed things up
>>> mkdir /mnt/memdisk
>>> mkdir /mnt/uboot
>>>
>>> truncate -s 1024M bbb.img
>>> sudo mdconfig -f bbb.img
>>>
>>> gpart create -s mbr md0
>>> gpart add -t fat32 -b 1M -s 50M md0
>>> newfs_msdos -F32 /dev/md0s1
>>> gpart add -t freebsd md0
>>> sudo newfs /dev/md0s2
>>>
>>> #build
>>>
>>> make -DNO_CLEAN TARGET=arm TARGET_ARCH=armv6 -j10 buildworld
>>> make -DNO_CLEAN TARGET=arm TARGET_ARCH=armv6
>>> KERNCONF=BEAGLEBONE-MMCCAM -j10 buildkernel
>>>
>>> #install
>>> sudo mount_msdosfs /dev/md0s1 /mnt/uboot/
>>> sudo mount /dev/md0s2 /mnt/memdisk/
>>> sudo make TARGET_ARCH=armv6 DESTDIR=/mnt/memdisk installworld distribution
>>>
>>> build error (full output is here: https://pastebin.com/VU3XDt5u):
>>>
>>> --------------------------------------------------------------
>>>>>> Installing everything
>>> --------------------------------------------------------------
>>> cd /usr/home/russellh/FreeBSD/hummingboard/src; make -f Makefile.inc1
>>> install
>>> ===> lib (install)
>>> ===> lib/csu (install)
>>> ===> lib/csu/arm (install)
>>> cc -target armv6-gnueabihf-freebsd12.0
>>> --sysroot=/usr/obj/arm.armv6/usr/home/russellh/FreeBSD/hummingboard/src/tmp
>>> -B/usr/obj/arm.armv6/usr/home/russellh/FreeBSD/hummingboard/src/tmp/usr/bin
>>> -O -pipe -I/usr/home/russellh/FreeBSD/hummingboard/src/lib/csu/common
>>> -I/usr/home/russellh/FreeBSD/hummingboard/src/lib/libc/include
>>> -std=gnu99 -Wsystem-headers -Werror -Wall -Wno-format-y2k -W
>>> -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes
>>> -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch
>>> -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline
>>> -Wnested-externs -Wredundant-decls -Wold-style-definition
>>> -Wno-pointer-sign -Wthread-safety -Wno-empty-body -Wno-string-plus-int
>>> -Wno-unused-const-variable  -Qunused-arguments
>>> ERROR-tried-to-rebuild-during-make-install -mlong-calls -S -o crt1.s
>>> /usr/home/russellh/FreeBSD/hummingboard/src/lib/csu/arm/crt1.c
>>> /tmp/install.t1fF66Xy/sh: cc: not found
>>> *** Error code 127
>>>
>>> Stop.
>>> make[6]: stopped in
>>> /usr/home/russellh/FreeBSD/hummingboard/src/lib/csu/arm
>>> *** Error code 1
>>>
>>> Stop.
>>> make[5]: stopped in
>>> /usr/home/russellh/FreeBSD/hummingboard/src/lib/csu
>>> *** Error code 1
>>>
>>> Stop.
>>> make[4]: stopped in /usr/home/russellh/FreeBSD/hummingboard/src/lib
>>> *** Error code 1
>>>
>>> Stop.
>>> make[3]: stopped in /usr/home/russellh/FreeBSD/hummingboard/src
>>> *** Error code 1
>>>
>>> Stop.
>>> make[2]: stopped in /usr/home/russellh/FreeBSD/hummingboard/src
>>> *** Error code 1
>>>
>>> Stop.
>>> make[1]: stopped in /usr/home/russellh/FreeBSD/hummingboard/src
>>> *** Error code 1
>>>
>>> Stop.
>>> make: stopped in /usr/home/russellh/FreeBSD/hummingboard/src
>>>
>>>
>>>
>>> Thanks,
>>> Russ
>>>
>>> On Mon, Jul 17, 2017 at 11:39 AM, Russell Haley <russ.haley@gmail.com> wrote:
>>>> On Mon, Jul 17, 2017 at 11:34 AM, Ian Lepore <ian@freebsd.org> wrote:
>>>>> On Mon, 2017-07-17 at 11:32 -0700, Russell Haley wrote:
>>>>>> On Sun, Jul 16, 2017 at 7:30 PM, Ian Lepore <ian@freebsd.org> wrote:
>>>>>> >
>>>>>> > On Sun, 2017-07-16 at 17:41 -0700, Russell Haley wrote:
>>>>>> > >
>>>>>> > > Hi,
>>>>>> > >
>>>>>> > > I'm building for a BBB and I think I've got almost everything but
>>>>>> > > I
>>>>>> > > er... can't find the dtb file or the uEnv.txt file. Any help
>>>>>> > > would be
>>>>>> > > grand? I have a feeling I'm going to have to beg/borrow/steal a
>>>>>> > > uEnv.txt file from a pre-built image.
>>>>>> > >
>>>>>> > > As I'm going through the process of re-learning the build steps,
>>>>>> > > i
>>>>>> > > thought of a couple of things that I either didn't see or
>>>>>> > > couldn't
>>>>>> > > find on the website:
>>>>>> > >
>>>>>> > > - A list of boards and their kernel config files
>>>>>> > > - An easy reference on where to find the bits after the build.
>>>>>> > > yes,
>>>>>> > > yes, it's in the handbook.
>>>>>> > > - Since u-boot has been standardised now, it would be nice to
>>>>>> > > have a
>>>>>> > > section on where to get u-boot and the other bits needed to boot.
>>>>>> > >
>>>>>> > > Anyway, I've got an unprecedented week with no work and no kids,
>>>>>> > > so
>>>>>> > > I'm going to do what any sane person would do during a beautiful
>>>>>> > > July
>>>>>> > > summer: play with FreeBSD!
>>>>>> > >
>>>>>> > > My end goal - and this is a stretch target - is to try and adopt
>>>>>> > > Illyia's SDIO driver. I'm not sure how far I'll get, or much time
>>>>>> > > I'll
>>>>>> > > have after my week is up, but that's what my objective is. I've
>>>>>> > > built
>>>>>> > > the system using the kernel config BEAGLEBONE-MMCCAM in the blind
>>>>>> > > hope
>>>>>> > > that it will use his drivers? Once I get that working and can
>>>>>> > > verify
>>>>>> > > it in dtrace (maybe? yet another rabbit hole!) I want to get it
>>>>>> > > working on my IMX6 hummingboard.
>>>>>> > >
>>>>>> > > oh, and I suppose I should open up some code, eh?
>>>>>> > >
>>>>>> > > Okay, now why isn't my PC computer seeing my sd cards? grrr... ;)
>>>>>> > >
>>>>>> > > Cheers,
>>>>>> > >
>>>>>> > > Russ
>>>>>> > You don't need a uenv.txt file.  It was always optional, and with
>>>>>> > the
>>>>>> > latest uboot stuff it's completely gone.
>>>>>> >
>>>>>> > -- Ian
>>>>>> Thanks Ian.
>>>>>>
>>>>>> DTB files are apparently generated with buildworld.
>>>>>>
>>>>>> https://wiki.freebsd.org/FlattenedDeviceTree
>>>>>>
>>>>>> I know they are generated with a specific tool (the name of which I
>>>>>> forget) . I'm surprised it's not it's own target or at least part of
>>>>>> buildkernel.
>>>>>>
>>>>>> Russ
>>>>>
>>>>> The DTB files installed on our distributed images are built from
>>>>> sys/modules/dtb (which makes them part of the kernel build unless you
>>>>> go out of your way to build them by themselves).
>>>>
>>>> EBK (Error Behind Keyboard): Forgot the single quotes in my find
>>>> command. oops. Thanks!
>>>>
>>>> russellh@prescott:~/FreeBSD/hummingboard/obj/arm.armv6/usr/home/russellh/FreeBSD/hummingboard/src/sys%
>>>> find . -name '*dtb*'
>>>> ./BEAGLEBONE-MMCCAM/modules/usr/home/russellh/FreeBSD/hummingboard/src/sys/modules/dtb
>>>> ./BEAGLEBONE-MMCCAM/modules/usr/home/russellh/FreeBSD/hummingboard/src/sys/modules/dtb/am335x/am335x-boneblack.dtb
>>>> ./BEAGLEBONE-MMCCAM/modules/usr/home/russellh/FreeBSD/hummingboard/src/sys/modules/dtb/am335x/ufw.dtb
>>>> ./BEAGLEBONE-MMCCAM/modules/usr/home/russellh/FreeBSD/hummingboard/src/sys/modules/dtb/am335x/am335x-bonegreen.dtb
>>>> ./BEAGLEBONE-MMCCAM/modules/usr/home/russellh/FreeBSD/hummingboard/src/sys/modules/dtb/am335x/am335x-bone.dtb



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CABx9NuS89JcgzMkO0tq8gLFP64Rt3R-y3esaXHGu0%2BdW9XSU9A>