Skip to contentSkip to conversation

Building u-boot for iMX28 and getting error in mkimage of missing command line parameter CONFIG_IMX_CONFIG

U-Boot Bill 2 participants 12 messages Jul 26, 2012 – Jul 31, 2012

lore
Share & tools
lore

Bill

author
#0 lore raw

All,

I am working on building the latest u-boot for the imx28evk board.
I have done the following steps:

1. git clone git://git.denx.de/u-boot-imx.git
2. setup paths for finding my cross-compiler

1.  make mx28evk_config
2.  make u-boot.imx
3.  It then gets through most of the build process and then fails on 

this command line:

                $ tools/mkimage -n -T imximage -e 0x40000100 -d 
u-boot.bin u-boot.imx

after more digging, its looks like the CONFIG_IMX_CONFIG var is not getting filled in (I believe this value should follow the -n parameter)

Thanks,
Bill

#1 lore raw

Bill,

Quoted 9 lines · Bill

All,

I am working on building the latest u-boot for the imx28evk board. I
have done the following steps:

1. git clone git://git.denx.de/u-boot-imx.git
2. setup paths for finding my cross-compiler
1. make mx28evk_config
2. make u-boot.imx

'make u-boot.imx' is not correct for mx28.

You should do:

make u-boot.sb

Please follow the instructions at doc/README.mx28_common for the correct process.

Regards,

Fabio Estevam

author
#2 lore raw

Thanks. That did it!

However, now my new U-boot built from the mainstream Uboot runs and also loads and unpacks the Linux kernel - but it dies after that. However, my original U-boot from tlib works fine. Are there some patches and/or settings I am missing?

Thanks,

Bills

Quoted 24 lines · Fabio Estevam

Bill,

Quoted 9 lines · Bill

All,

I am working on building the latest u-boot for the imx28evk board. I
have done the following steps:

1. git clone git://git.denx.de/u-boot-imx.git
2. setup paths for finding my cross-compiler
1. make mx28evk_config
2. make u-boot.imx

'make u-boot.imx' is not correct for mx28.

You should do:

make u-boot.sb

Please follow the instructions at doc/README.mx28_common for the correct process.

Regards,

Fabio Estevam

Signature · 8 lines
William (Bill) L. Sousan, Ph.D.
(w) 402.331.4977 ext. 4002
bsousan at techsi.com
Technical Support Inc.
11253 John Galt Blvd
Omaha, NE 68137
www.techsi.com
8(a) SDB Certified, ISO 9001:2008
#3 lore raw

Bill,

Quoted 7 lines · Bill

Thanks. That did it!

However, now my new U-boot built from the mainstream Uboot runs and also loads and unpacks the Linux kernel - but it dies after that. However, my original U-boot from tlib works fine. Are there some patches and/or settings I am missing?

I suppose you are using the 2.6.35 kernel. In this FSL kernel the console is ttyAM0.

In mainline kernel the console is ttyAMA0.

This is probably the reason you don't see nothing in the console.

I would suggest you to use the mainline kernel though.

Regards,

Fabio Estevam

author
#4 lore raw

Thanks. I tried that and got the same results. Are there any debug/logging that I can use to see what's going on?

Also, I'm not sure which console parameters are passed to the kernel.
I've seen console, console_mainline, console_fsl, etc... Which one is
actually passed as command line params to the kernel?

Thanks,
Bill

Quoted 22 lines · Fabio Estevam

Bill,

Quoted 7 lines · Bill

Thanks. That did it!

However, now my new U-boot built from the mainstream Uboot runs and also loads and unpacks the Linux kernel - but it dies after that. However, my original U-boot from tlib works fine. Are there some patches and/or settings I am missing?

I suppose you are using the 2.6.35 kernel. In this FSL kernel the console is ttyAM0.

In mainline kernel the console is ttyAMA0.

This is probably the reason you don't see nothing in the console.

I would suggest you to use the mainline kernel though.

Regards,

Fabio Estevam

Signature · 8 lines
William (Bill) L. Sousan, Ph.D.
(w) 402.331.4977 ext. 4002
bsousan at techsi.com
Technical Support Inc.
11253 John Galt Blvd
Omaha, NE 68137
www.techsi.com
8(a) SDB Certified, ISO 9001:2008
#5 lore raw
Quoted 2 lines · Bill

Thanks. I tried that and got the same results. Are there any debug/logging that I can use to see what's going on?

I just tried it here and 2012.07-rc3 does not boot for me too.

I started another thread on that.

I suggest you to use 2012.04.01.

Regards,

Fabio Estevam

#6 lore raw
Quoted 5 lines · Fabio Estevam
Quoted 2 lines · Bill

Thanks. I tried that and got the same results. Are there any debug/logging that I can use to see what's going on?

I just tried it here and 2012.07-rc3 does not boot for me too.

I was using the wrong LOADADDR for mx28, and that's the reason it did not boot.

What is the error you are seeing? Can you post your log?

Here is the log on 2012.07-rc3:
...

U-Boot 2012.07-rc3 (Jul 28 2012 - 17:08:24)

Freescale i.MX28 family at 454 MHz

BOOT:  SSP SD/MMC #0, 3V3
I2C:   ready
DRAM:  128 MiB
MMC:   MXS MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0

Using FEC0 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2 Filename 'uImage'.
Load address: 0x42000000
Loading: #################################################################

         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ######
done
Bytes transferred = 2358008 (23faf8 hex)
## Booting kernel from Legacy Image at 42000000 ...
   Image Name:   Linux-3.5.0-next-20120727-00004-
   Created:      2012-07-28  20:06:58 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2357944 Bytes = 2.2 MiB

Load Address: 40008000
Entry Point: 40008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

[    0.000000] Booting Linux on physical CPU 0
[    0.000000] Linux version 3.5.0-next-20120727-00004-gef9b4ac
(fabio at fabio-Latitude-E6410) (gcc version 4.4.4 (4.4.4_09.06.2010) )
#1309 Sat Jul 28 17:06:52
[    0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: Freescale MX28 EVK
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.
Total pages: 32512
[    0.000000] Kernel command line: console=ttyAMA0 root=/dev/nfs
ip=dhcp nfsroot=192.168.1.1:/tftpboot/ltib,v3,tcp
[    0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Memory: 128MB = 128MB total
[    0.000000] Memory: 119808k/119808k available, 11264k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:

....

author
#7 lore raw

Here is my log. It stops at the "done, booting kernel." I tried
setting the console to ttyAM0 and no change. I don't think its booting as I don't see the LCD flash and no penguin. The odd this is that I
built the latest kernel for iMX and this uboot will boot it. I also
included my u-boot environment settings at the end.

Thanks,
Bills

U-Boot 2012.07-rc1-08235-g7c5f511 (Jul 26 2012 - 12:00:38)

Freescale i.MX28 family at 454 MHz

BOOT:  SSP SD/MMC #0, 3V3
I2C:   ready
DRAM:  128 MiB
MMC:   MXS MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0

Booting from net ...
BOOTP broadcast 1
*** Unhandled DHCP Option in OFFER/ACK: 42
*** Unhandled DHCP Option in OFFER/ACK: 44
*** Unhandled DHCP Option in OFFER/ACK: 42
*** Unhandled DHCP Option in OFFER/ACK: 44
DHCP client bound to address 192.168.0.240
Using FEC0 device
TFTP from server 192.168.0.204; our IP address is 192.168.0.240 Filename 'uImage'.
Load address: 0x42000000
Loading: #################################################################

          #################################################################
          #################################################################
          #################################################################
          #################################################################
          #################################################################
          #################################################################
          ##############################################
done
Bytes transferred = 2562232 (2718b8 hex)
## Booting kernel from Legacy Image at 42000000 ...
    Image Name:   Linux-2.6.35.3-571-gcca29a0
    Created:      2012-07-12  15:53:55 UTC
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    2562168 Bytes = 2.4 MiB

Load Address: 40008000
Entry Point: 40008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

U-boot environment settings:

U-Boot 2012.07-rc1-08235-g7c5f511 (Jul 26 2012 - 12:00:38)

Freescale i.MX28 family at 454 MHz

BOOT:  SSP SD/MMC #0, 3V3
I2C:   ready
DRAM:  128 MiB
MMC:   MXS MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0

MX28EVK U-Boot > printenv
baudrate=115200
bootargs=console=ttyAMA0,115200n8 debug root=/dev/nfs ip=dhcp nfsroot=192.168.0.204:/tools/rootfs,v3,tcp fec_mac= bootcmd=run bootcmd_net
bootcmd_net=echo Booting from net ...; run netargs; dhcp ${uimage}; bootm bootdelay=3
bootfile=uImage
console=ttyAMA0 console_fsl=console=ttyAM0console_mainline=console=ttyAMA0netargs=setenv bootargs console=${console_mainline}root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot}
console_mainline=ttyAMA0
ethact=FEC0
ipaddr=192.168.0.19
loadaddr=0x42000000
netargs=setenv bootargs console=ttyAMA0,115200 netmask=255.255.255.0
nfsroot=/tools/rootfs
serverip=192.168.0.204
stderr=serial
stdin=serial
stdout=serial
ver=U-Boot 2012.07-rc1-08235-g7c5f511 (Jul 26 2012 - 12:00:38)

Environment size: 770/16380 bytes
MX28EVK U-Boot >

Quoted 71 lines · Fabio Estevam
Quoted 4 lines · Fabio Estevam
Quoted 2 lines · Bill

Thanks. I tried that and got the same results. Are there any debug/logging that I can use to see what's going on?

I just tried it here and 2012.07-rc3 does not boot for me too.

I was using the wrong LOADADDR for mx28, and that's the reason it did not boot.

What is the error you are seeing? Can you post your log?

Here is the log on 2012.07-rc3:
...

U-Boot 2012.07-rc3 (Jul 28 2012 - 17:08:24)

Freescale i.MX28 family at 454 MHz

BOOT:  SSP SD/MMC #0, 3V3
I2C:   ready
DRAM:  128 MiB
MMC:   MXS MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0

Using FEC0 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2 Filename 'uImage'.
Load address: 0x42000000
Loading: #################################################################

          #################################################################
          #################################################################
          #################################################################
          #################################################################
          #################################################################
          #################################################################
          ######
done
Bytes transferred = 2358008 (23faf8 hex)
## Booting kernel from Legacy Image at 42000000 ...
    Image Name:   Linux-3.5.0-next-20120727-00004-
    Created:      2012-07-28  20:06:58 UTC
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    2357944 Bytes = 2.2 MiB

Load Address: 40008000
Entry Point: 40008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

[    0.000000] Booting Linux on physical CPU 0
[    0.000000] Linux version 3.5.0-next-20120727-00004-gef9b4ac
(fabio at fabio-Latitude-E6410) (gcc version 4.4.4 (4.4.4_09.06.2010) )
#1309 Sat Jul 28 17:06:52
[    0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: Freescale MX28 EVK
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.
Total pages: 32512
[    0.000000] Kernel command line: console=ttyAMA0 root=/dev/nfs
ip=dhcp nfsroot=192.168.1.1:/tftpboot/ltib,v3,tcp
[    0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Memory: 128MB = 128MB total
[    0.000000] Memory: 119808k/119808k available, 11264k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:

....

Signature · 8 lines
William (Bill) L. Sousan, Ph.D.
(w) 402.331.4977 ext. 4002
bsousan at techsi.com
Technical Support Inc.
11253 John Galt Blvd
Omaha, NE 68137
www.techsi.com
8(a) SDB Certified, ISO 9001:2008
#8 lore raw
Quoted 4 lines · Bill

Here is my log. It stops at the "done, booting kernel." I tried setting
the console to ttyAM0 and no change. I don't think its booting as I don't see the LCD flash and no penguin. The odd this is that I built the latest
kernel for iMX and this uboot will boot it. I also included my u-boot

Do you mean you are able to boot a mainline kernel, but not a 2.6.35 kernel?

Quoted 18 lines

environment settings at the end.

U-boot environment settings:

U-Boot 2012.07-rc1-08235-g7c5f511 (Jul 26 2012 - 12:00:38)

Freescale i.MX28 family at 454 MHz

BOOT:  SSP SD/MMC #0, 3V3
I2C:   ready
DRAM:  128 MiB
MMC:   MXS MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0
Quoted 3 lines

MX28EVK U-Boot > printenv
baudrate=115200
bootargs=console=ttyAMA0,115200n8 debug root=/dev/nfs ip=dhcp

Please change it to ttyAM0.

Quoted 6 lines

nfsroot=192.168.0.204:/tools/rootfs,v3,tcp fec_mac= bootcmd=run bootcmd_net
bootcmd_net=echo Booting from net ...; run netargs; dhcp ${uimage}; bootm bootdelay=3
bootfile=uImage
console=ttyAMA0

If you boot a 2.6.35 you need to use ttyAM0.

Quoted 1 line

console_fsl=console=ttyAM0console_mainline=console=ttyAMA0netargs=setenv

This line seems to be without any spaces. Are you sure this is correct?

Make sure your kernel command line passes ttyAM0 instead of ttyAMA0 if you want to boot a 2.6.35 kernel.

author
#9 lore raw

Progress! I switched all the references from ttyAMA0... to ttyAM0.
Also changed netargs too. Now it starts to boot linux but hangs right after the line of:
mxs_cpu_init: cpufreq init finished.
In regards to your question, yes it was booting the mainline kernel.

Here is the latest output from the boot.

U-Boot 2012.07-rc1-08235-g7c5f511 (Jul 26 2012 - 12:00:38)

Freescale i.MX28 family at 454 MHz

BOOT:  SSP SD/MMC #0, 3V3
I2C:   ready
DRAM:  128 MiB
MMC:   MXS MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0

Booting from net ...
BOOTP broadcast 1
*** Unhandled DHCP Option in OFFER/ACK: 42
*** Unhandled DHCP Option in OFFER/ACK: 44
*** Unhandled DHCP Option in OFFER/ACK: 42
*** Unhandled DHCP Option in OFFER/ACK: 44
DHCP client bound to address 192.168.0.240
Using FEC0 device
TFTP from server 192.168.0.204; our IP address is 192.168.0.240 Filename 'uImage'.
Load address: 0x42000000
Loading: #################################################################

          #################################################################
          #################################################################
          #################################################################
          #################################################################
          #################################################################
          #################################################################
          ##############################################
done
Bytes transferred = 2562232 (2718b8 hex)
## Booting kernel from Legacy Image at 42000000 ...
    Image Name:   Linux-2.6.35.3-571-gcca29a0
    Created:      2012-07-12  15:53:55 UTC
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    2562168 Bytes = 2.4 MiB

Load Address: 40008000
Entry Point: 40008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.35.3-571-gcca29a0 (blsousan at ubuntu) (gcc version 4.4.4 (4.4.4_09.06.2010) ) #1 PREEMPT Thu Jul 12 08:53:51 PDT 2012
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Freescale MX28EVK board
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512 Kernel command line: console=ttyAM0,115200
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 124316k/124316k available, 6756k reserved, 0K highmem Virtual kernel memory layout:

     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
     DMA     : 0xfde00000 - 0xffe00000   (  32 MB)
     vmalloc : 0xc8800000 - 0xf0000000   ( 632 MB)
     lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
     modules : 0xbf000000 - 0xc0000000   (  16 MB)
       .init : 0xc0008000 - 0xc0030000   ( 160 kB)
       .text : 0xc0030000 - 0xc04f7000   (4892 kB)
       .data : 0xc04f8000 - 0xc0535960   ( 247 kB)

SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 Hierarchical RCU implementation.
RCU-based detection of stalled CPUs is disabled. Verbose stalled-CPUs detection is disabled.
NR_IRQS:288
Console: colour dummy device 80x30
console [ttyAM0] enabled
Calibrating delay loop... 226.09 BogoMIPS (lpj=1130496)
pid_max: default: 32768 minimum: 301
Security Framework initialized
SELinux: Initializing.
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
regulator: core version 0.5
NET: Registered protocol family 16
regulator: vddd: 800 <--> 1575 mV at 1500 mV fast normal
regulator: vdddbo: 800 <--> 1575 mV fast normal
regulator: vdda: 1500 <--> 2275 mV at 1800 mV fast normal vddio = 3380000, val=10
regulator: vddio: 2880 <--> 3680 mV at 3380 mV fast normal
regulator: overall_current: fast normal
regulator: vbus5v:
regulator: mxs-duart-1: fast normal
regulator: mxs-bl-1: fast normal
regulator: mxs-i2c-1: fast normal
regulator: mmc_ssp-1: fast normal
regulator: mmc_ssp-2: fast normal
regulator: charger-1: fast normal
regulator: power-test-1: fast normal
regulator: cpufreq-1: fast normal
i.MX IRAM pool: 124 KB at 0xc8820000
usb DR wakeup device is registered
IMX usb wakeup probe
audit: cannot initialize inotify handle
bio: create slab <bio-0> at 0
SCSI subsystem initialized
Freescale USB OTG Driver loaded, $Revision: 1.55 $
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Advanced Linux Sound Architecture Driver Version 1.0.23. Switching to clocksource mxs clock source
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 4096 (order: 3, 32768 bytes) TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module. Bus freq driver module loaded
IMX usb wakeup probe
usb h1 wakeup device is registered
mxs_cpu_init: cpufreq init finished

(Stops here)

Quoted 42 lines · Fabio Estevam
Quoted 4 lines · Bill

Here is my log. It stops at the "done, booting kernel." I tried setting
the console to ttyAM0 and no change. I don't think its booting as I don't see the LCD flash and no penguin. The odd this is that I built the latest
kernel for iMX and this uboot will boot it. I also included my u-boot

Do you mean you are able to boot a mainline kernel, but not a 2.6.35 kernel?

Quoted 17 lines

environment settings at the end.

U-boot environment settings:

U-Boot 2012.07-rc1-08235-g7c5f511 (Jul 26 2012 - 12:00:38)

Freescale i.MX28 family at 454 MHz

BOOT:  SSP SD/MMC #0, 3V3
I2C:   ready
DRAM:  128 MiB
MMC:   MXS MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0
Quoted 3 lines

MX28EVK U-Boot> printenv
baudrate=115200
bootargs=console=ttyAMA0,115200n8 debug root=/dev/nfs ip=dhcp

Please change it to ttyAM0.

Quoted 6 lines

nfsroot=192.168.0.204:/tools/rootfs,v3,tcp fec_mac= bootcmd=run bootcmd_net
bootcmd_net=echo Booting from net ...; run netargs; dhcp ${uimage}; bootm bootdelay=3
bootfile=uImage
console=ttyAMA0

If you boot a 2.6.35 you need to use ttyAM0.

Quoted 1 line

console_fsl=console=ttyAM0console_mainline=console=ttyAMA0netargs=setenv

This line seems to be without any spaces. Are you sure this is correct?

Make sure your kernel command line passes ttyAM0 instead of ttyAMA0 if you want to boot a 2.6.35 kernel.

Signature · 8 lines
William (Bill) L. Sousan, Ph.D.
(w) 402.331.4977 ext. 4002
bsousan at techsi.com
Technical Support Inc.
11253 John Galt Blvd
Omaha, NE 68137
www.techsi.com
8(a) SDB Certified, ISO 9001:2008
author
#11 lore raw

That did it! Thanks.

Bill

Quoted 13 lines · Fabio Estevam
Quoted 4 lines · Bill

Progress! I switched all the references from ttyAMA0... to ttyAM0. Also
changed netargs too. Now it starts to boot linux but hangs right after the line of:
mxs_cpu_init: cpufreq init finished.

Please remove cpufreq from your kernel config.

You can use this patch:
https://github.com/Freescale/meta-fsl-arm/blob/denzil/recipes-kernel/linux/linux-imx-2.6.35.3/mx28-removecpufreq.patch

Regards,

Fabio Estevam

Signature · 8 lines
William (Bill) L. Sousan, Ph.D.
(w) 402.331.4977 ext. 4002
bsousan at techsi.com
Technical Support Inc.
11253 John Galt Blvd
Omaha, NE 68137
www.techsi.com
8(a) SDB Certified, ISO 9001:2008