| Author |
Message |
|
|
Posted: Apr 24, 2007 - 06:28 AM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
I'm pulling this out of the former thread on NGW100/uboot because there were too many discussions going and I didn't want to clutter it up with questions and notes specific to SuSE 10.
This post includes some results from initial attempts to build the NGW image SuSE 10. Some solutions, some questions re: issues I hit along the way.
So, the results of my first trial build on my SuSE 10.1 using the build-linux-environment script was:
Code:
spanky:/home/ko/Documents/AVR32/scripts # ./build-linux-environment.sh ../software ../builds/ngw/ ../mybuilds
U-boot - unpacking OK
U-Boot - patching OK
U-boot - config and make OK
flash upgrade utility (u-boot upgrade) OK
Creating new root for Basic OK
uClibc - unpacking OK
uClibc - patching OK
uClibc - make oldconfig and make install OK
Linux kernel - unpacking OK
Linux kernel - patching OK
Linux kernel - make oldconfig and make OK
Busybox - unpacking OK
Busybox - patching OK
Busybox - make and make install OK
strace - unpacking OK
strace - patching OK
strace - configure, make, install OK
Zlib - unpacking OK
Zlib - configure, make, copy library to root OK
ncurses - unpack OK
ncurses - patching OK
ncurses - configure, make, make install OK
ftpd - unpacking OK
ftpd - patching OK
ftpd - make and copy to target OK
joe - unpacking OK
joe - patching OK
joe - configure, make, make install OK
gdbserver - autoconf and configure OK
gdbserver - make and make install OK
dropbear - unpacking OK
dropbear - patching OK
dropbear - configure, make and make install OK
ntp - unpacking tar: A lone zero block at 17300
OK
ntp - patching OK
ntp - configure, make and make install OK
net-tools - unpacking OK
net-tools - patching OK
net-tools - configure, make and make install OK
dnsmasq - unpacking OK
dnsmasq - patching OK
dnsmasq - configure, make and make install OK
Creating /etc/release for Basic OK
Creating runtime image for Basic FAILED
e2fsimage program not found, skipping image creation.
I looked for e2fsimage via yast2, but it's not supplied.
e2fsimage isn't available directly from SuSE DVD/yast2.
Need to install e2fsimage 0.2.2 but it has dependency on e2fsprogs headers.
Solution is to install e2fsprog (e2fsprogs-devel to be precise) from yast2 or consult this link: http://support.novell.com/techcenter/ps ... b3ce7.html
Code:
rpm -Fvh e2fsprogs.rpm
The home page for e2fsprogs is at:
http://e2fsprogs.sourceforge.net/ext2.html
After e2fsprogs is configured/installed with devel headers,
Then download e2fsimage-0.2.2 from http://sourceforge.net/projects/e2fsimage/
Code:
spanky:/tmp/e2fsimage-0.2.2 # ./configure
/usr /usr/local
Found: ext2fs/ext2fs.h at /usr/include
Found: e2p/e2p.h at /usr/include
Found: libext2fs.so at /usr/lib
Found: libcom_err.so at /usr/lib
The version of the e2fs library is: 1.38, 30-Jun-2005
LDFLAGS : -lext2fs -lcom_err
PREFIX :/usr/local
CPPFLAGS :
CFLAGS :-Wall
VERSION :0.2.2
GNU Make 3.80
GNU Make 3.80
A usable make executable was found in /usr/bin/make
Got much further into kernel build but then bombed on:
DirectFB - configure, make and make install OK
pong - make and make install FAILED
make failed, see make.out
make.out was complaining it couldn't find the DirectFB headers (package which got built right before pong.) In any case, when I looked at the ./build-linux-environment.sh script, this "pong" was coming from the STK1000 standard linux image build...it had already finished the Basic build used by both the STK1000 and the NGW.
So, my question is: is there any reason, if I'm working exclusively with the NGW100, that I need to be building anything for the STK1000 standard image? For the moment, I will comment out the build components for the STK1000. |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 06:48 AM |
|


Joined: Jan 07, 2003
Posts: 4580
Location: Oslo, Norway
|
|
| Comment out building pong, you do not need it. |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 01:49 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
Thanks, yes, I did that right off.
My question was more around whether there was a reason to build STK1000 components and image at all if all I'm concerned with is the NGW100? I'm wondering if there's a later step in this process where I'll need some component the STK1000 build covered but the NGW build didn't.
Thanks |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 02:55 PM |
|


Joined: Jan 07, 2003
Posts: 4580
Location: Oslo, Norway
|
|
Correct, the NGW build uses the builds from the STK1000 build I think. I do not have that great knowledge about this script. I am, like you, just a user of it  |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 03:21 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
The build script has two sections, one which apparently builds an image that that is "Basic AVR32 Linux image" and the comment above it says "includes all packages used by both the STK1000 and the NGW. Then below that build section is another build section that seems to be only for STK1000 "STK1000 Linux image - standard" - it's the second one in which "pong" was a part of which is obviously not applicable to the NGW.
So, I have commented out the entire 2nd STK1000 build section and have left in the "Basic AVR32 Linux image" build script all the way up to "create_image".
I was able get it to successfully generate an image for me. This is what it generated in my "mybuilds" directory when I ran the script:
Code:
total 15299
drwxr-xr-x 7 root root 296 2007-04-23 22:42 avr32-linux-image-basic
-rw-r--r-- 1 root root 15483675 2007-04-23 22:45 avr32-linux-image-basic.img.gz
drwxr-xr-x 7 root root 296 2007-04-23 22:10 avr32-linux-image-stk1000
-rwxr-xr-x 1 root root 94672 2007-04-23 22:23 u-boot.bin
-rw-r--r-- 1 root root 61775 2007-04-23 22:23 u-boot-upgrade-1.1.4-at1-from-bsp-1.0.uimg
So, I believe I just got my first kernel build from SuSE 10.
Now I'd like to try to flash my NGW with it. I didn't see any tutorials in the docs on how to set up uboot for a TFTP flashing. The BSP wiki docs section "AVR32 Linux Development/U-Boot" didn't cover very much. I'm probably missing it. If someone could point me to the right place in the docs that'd be great...otherwise, if there's a documented procedure somewhere else, that's fine, too. |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 04:03 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
| I found the TFTP stuff on the BSP wiki on the page titled "AVR32 Linux Development/Filesystem over NFS for AVR32 Linux" |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 05:51 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
I found some problems with the BSP wiki docs related to TFTP. It mentions setting 'tfpserver' to the IP of the TFTP server.
In order to get it to work I set the tftpip variable not "tfpserver" as the wiki states. Also, in my environment I copied my 'mybuilds' directory to the TFTP root, so I needed to add the subdirectory 'avr32-linux-image-basic' to the uImage filename. That's not an error per-se, just a difference in how I set it up. Here's the setup and boot:
Code:
Uboot> set bootcmd 'set bootfile avr32-linux-image-basic/uImage;dhcp;bootm'
Uboot> printenv
baudrate=115200
ethaddr=00:04:25:1C:50:DC
bootdelay=1
eth1addr=00:04:25:1C:50:DD
bootargs=console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2
tftpip=192.168.5.177
serverip=192.168.5.177
stdin=serial
stdout=serial
stderr=serial
bootfile=uImage
ethact=macb0
bootcmd=set bootfile avr32-linux-image-basic/uImage;dhcp;bootm
Environment size: 318/65532 bytes
Uboot> boot
macb0: Starting autonegotiation...
macb0: Autonegotiation complete
macb0: link up, 10Mbps half-duplex (lpa: 0x0021)
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.5.170
Using macb0 device
TFTP from server 192.168.5.177; our IP address is 192.168.5.170
Filename 'avr32-linux-image-basic/uImage'.
Load address: 0x10200000
Loading: T #################################################################
#################################################################
##########################################
done
Bytes transferred = 879312 (d6ad0 hex)
## Booting image at 10200000 ...
Image Name: Linux-2.6.18-at1
Image Type: AVR32 Linux Kernel Image (gzip compressed)
Data Size: 879248 Bytes = 858.6 kB
Load Address: 10000000
Entry Point: 90000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
As you can see I was able to transfer and boot an image by TFTP. Given the fact busybox init is a lot different from the stock console output of the factory flashed image and failed to setup eth1, GPIO s99gpio: 8 failed, this must have been the image I built. Not sure how else to verify that it booted my image, but it looks like it did.
So, the next major question is why, if I used the build-linux script from the BSP, doesn't the resulting boot work the same as the stock board? I'm obviously missing something in the process. What I want to get to is this:
Use the BSP build scripts to build an image, boot it on the NGW100 and get the same results as the stock flashed image. Once I have that repeatable baseline, I feel like I could continue with actual app development.
What should be my next steps to resolve this so I can do a basic build with the BSP scripts and get it to work like the stock flash? |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 06:03 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
Here's the full output of my first kernel build boot log where you can see it failed in various busybox inits:
Code:
Loading: T #################################################################
#################################################################
##########################################
done
Bytes transferred = 879312 (d6ad0 hex)
## Booting image at 10200000 ...
Image Name: Linux-2.6.18-at1
Image Type: AVR32 Linux Kernel Image (gzip compressed)
Data Size: 879248 Bytes = 858.6 kB
Load Address: 10000000
Entry Point: 90000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Starting kernel at 90000000 (params at 11fc0040)...
clk pixclk: new parent pll0 (was (null))
clk pixclk: new rate 130000000 (actual rate 130000000)
pdc pdc.0: Atmel Peripheral DMA Controller enabled
EIM: External Interrupt Module at 0xfff00000, IRQ 19
EIM: Handling 4 external IRQs, starting with IRQ 64
smc smc.0: Atmel Static Memory Controller at 0xfff03400
pio0: Atmel Port Multiplexer at 0xffe02800 (irq 13)
pio0: Handling 32 external IRQs, starting with IRQ 96
pio1: Atmel Port Multiplexer at 0xffe02c00 (irq 14)
pio1: Handling 32 external IRQs, starting with IRQ 128
pio2: Atmel Port Multiplexer at 0xffe03000 (irq 15)
pio2: Handling 32 external IRQs, starting with IRQ 160
pio3: Atmel Port Multiplexer at 0xffe03400 (irq 16)
pio3: Handling 32 external IRQs, starting with IRQ 192
dmac0: DesignWare DMA controller at 0xff200000 irq 2
NET: Registered protocol family 2
IP route cache hash table entries: 256 (order: -2, 1024 bytes)
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 1024 bind 512)
TCP reno registered
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered (default)
sidsafb: 76800B framebuffer too small for 320x240x24
sidsafb: 76800B framebuffer too small for 320x240x24
sidsafb: No suitable video mode found
Serial: Atmel USART3 driver
usart.1: ttyS0 at MMIO 0xffe01000 (irq = 7) is a USART3
usart.2: ttyS1 at MMIO 0xffe01400 (irq = 8) is a USART3
usart.3: ttyS2 at MMIO 0xffe01800 (irq = 9) is a USART3
eth0: Atmel MACB at 0xfff01800 irq 25 (00:04:25:1c:50:dc)
physmap platform flash device: 00800000 at 00000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
Amd/Fujitsu Extended Query Table at 0x0041
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
Using physmap partition information
Creating 3 MTD partitions on "physmap-flash.0":
0x00000000-0x00020000 : "u-boot"
0x00020000-0x007f0000 : "root"
0x007f0000-0x00800000 : "env"
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xffe00000 (irq 3)
mmc0: Atmel MCI controller at 0xfff02400 irq 28
TCP bic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
Time: avr32 clocksource has been installed.
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 52K (90000000 - 9000d000)
init started: BusyBox v1.2.2 (2006.12.13-14:13+0000) multi-call binary
* mounting virtual filesystems: /proc /sys /dev/pts /dev/shm /config /var/log /var/log/samba /var/log/ntpstats /tmp
* setting hostname ... 'ngw.example.net'
* network loopback ... [ OK ]
* starting syslogd ... [ OK ]
* log messages to syslog ... [ OK ]
* starting klogd ... [ OK ]
* set mdev hotplug ... [ OK ]
* mdev ... [ OK ]
* probing modules ... vfat failed, mmc_block failed, atmel-mci failed, [ OK ]
* mounting filesystems: [ FAILED ]
* setup eth0 ... /etc/init.d/S10networking: /etc/init.d/S10networking: 23: awk: not found
[ STATIC ] ()
* setup eth1 ... [ FAILED ]
* Network ... [ FAILED ]
* get board type for GPIO ... /etc/init.d/S99gpio: /etc/init.d/S99gpio: 8: cut: not found
[ FAILED ]
Network Gateway ready
So, my question is, since I built this image from the build script on the BSP, what would account for these failures and what should I do to start correcting these so I can get on top of a good kernel build? |
|
|
| |
|
|
|
|
|
Posted: Apr 24, 2007 - 06:14 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
BTW - related to the other thread on USART mapping to /dev/tty devices, check out the output above:
Code:
usart.1: ttyS0 at MMIO 0xffe01000 (irq = 7) is a USART3
usart.2: ttyS1 at MMIO 0xffe01400 (irq = 8) is a USART3
usart.3: ttyS2 at MMIO 0xffe01800 (irq = 9) is a USART3
I went to my /dev on this build and see /dev/ttyS0, /dev/ttyS1 and /dev/ttyS2. I haven't yet soldered any headers on my board to actually try out the auxilliary uarts, but this makes it look like it found it. Again, just brings up more questions about why this build from the BSP would act so differently than the stock image. |
|
|
| |
|
|
|
|
|
Posted: Apr 25, 2007 - 08:19 AM |
|


Joined: Jan 07, 2003
Posts: 4580
Location: Oslo, Norway
|
|
You have made a kernel for the ATSTK1000, you need to apply the atngw_defconfig instead:
Code:
make ARCH=avr32 CROSS_COMPILE=avr32-linux- atngw_defconfig
And you need the patch to put PORT E as GPIO. |
|
|
| |
|
|
|
|
|
Posted: Apr 25, 2007 - 08:21 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
hmmm...I used the build-linux script from the BSP script directory and even had the STK1000 portion "STK1000 Linux image - standard" of the build commented out.
Code:
# Build Basic Linux image
# This includes all pacakges used by both the STK1000 and the NGW
ROOT=${ROOT_BASIC}
ROOT_REF=$sd_image_ref
ROOT_IMAGE_NAME="Basic AVR32 Linux image"
ROOT_IMAGE_SIZE=120000
create_root
build_uclibc
build_kernel
build_busybox
build_strace
build_zlib
build_ncurses
build_ftpd
build_joe
build_gdbserver
build_dropbear
build_ntp
build_net_tools
build_dnsmasq
create_etc_release
create_image
# Build STK1000 Standard Linux image
#ROOT=${ROOT_STK1000}
#ROOT_REF=${ROOT_BASIC}
#ROOT_IMAGE_NAME="STK1000 Linux image - standard"
#ROOT_IMAGE_SIZE=120000
#create_root
#build_libpng
#build_libungif
#build_libjpeg
#build_fbv
#build_fbset
#build_alsa_lib
#build_alsa_utils
#build_fusion
#build_freetype
#build_directfb
#build_pong
#build_gawk
#get_stk1000_web
#create_etc_release
#create_image
So, what else would I need to comment out of the script in order to build an NGW only build?
Where can I find the procedure to patch the PORT E/GPIO?
I also wanted to know if there were instructions anywhere which discussed how to load the 3 types of images: uImage, the jffs usr img, and the jffs root img. These 3 images get built when I run the build scripts from the BSP. Is there any tutorial for how they should be loaded and flashed into the device? How can I load and test them before I flash them into the device?
Sorry I'm still green at this and can use pointers. I'm documenting as I go, so hopefully anyone following with similar questions will be able to do it as well.
Thanks for your help,
Landon |
|
|
| |
|
|
|
|
|
Posted: Apr 25, 2007 - 08:29 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
So, digging into the build-linux-environment.sh script, I need to ask - do I add the atngw_defconfig to every instance of
Code:
make ARCH=avr32 CROSS_COMPILE=avr32-linux-
that I see in the build script? Or am I missing a default config variable somewhere where I can change it once and it will affect the whole build? |
|
|
| |
|
|
|
|
|
Posted: Apr 25, 2007 - 10:09 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
I copied the patch file from this thread: Quick and dirty patch for Port E GPIO to my software/linux directory and added it to the end of the linux/series text file.
Based on reading the build script, I think it should get picked up automatically during the patch phase of the build. Is this the correct way to incorporate patches - toss them into the software/linux directory and modify the series txt file?
I need some guidance as to where to include the atngw_defconfig modification in the script to build an NGW only image.
I copied back over the build-linux-environment.sh script from the BSP to my dev machine to make sure I was starting with exactly what came off the BSP and just commented out the "pong" build.
Seems like there must be some build env variable I'm missing that would let me just specify the NGW build so I don't accidentally build STK1000 (also/only.) |
|
|
| |
|
|
|
|
|
Posted: Apr 26, 2007 - 08:47 AM |
|


Joined: Sep 14, 2003
Posts: 4228
Location: Queanbeyan, Australia
|
|
No I don't think you're missing anything, that script is just pretty heavily stk1000-only. It's set up such that the script's author can add the ngw-specific bits later, but it appears that those changes either don't yet exist or haven't made it on to the BSP2.0.0.
Your assumptions about the patching of porte are correct, yep. That should all work.
As for where to place the config, I don't have the script on me to tell you exactly but you should find a step (or series of steps) in the kernel build portion of the script which makes the correct config. The lines might either copy a config from somewhere then 'make [FLAGS] oldconfig', or they might 'make [FLAGS] defconfig'. Either way, this line which generates the config is the one which should be changed to 'make [FLAGS] atngw_defconfig.
You may find that the defconfig doesn't in fact have everything you'll want, in which case jump in the the Linux menuconfig, select all you do want and save the config. Then copy the .config to somewhere safe and chage the build script to copy this config file in to the source directory after patching, then get it to run 'make [FLAGS] oldconfig'.
Hope this helps a little, I shall attack the script when I get home and see if I can make it a bit more user-friendly
-S. |
|
|
| |
|
|
|
|
|
Posted: Apr 26, 2007 - 04:30 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
So, it's clear now that the build scripts on the BSP were never used to build the NGW images that ship with the board. Whatever was used to build the stock images wasn't supplied by Atmel. I think it should be, so hopefully Atmel is listening and will supply build scripts that really build an NGW image.
I'm trying a couple of things right now. In the build-linux-environment.sh script I'm creating a new NGW build root type:
Code:
ROOT_BASIC="`cd ${BUILDDIR}/avr32-linux-image-basic && pwd`"
#ROOT_STK1000="`cd ${BUILDDIR}/avr32-linux-image-stk1000 && pwd`"
ROOT_NGW100="`cd ${BUILDDIR}/avr32-linux-image-ngw100 && pwd`"
Then changing the name of the image to be specific to ngw:
Code:
# Build NGW100 Standard Linux image
ROOT=${ROOT_NGW100}
ROOT_REF=${ROOT_BASIC}
ROOT_IMAGE_NAME="NGW100 Linux image - standard"
ROOT_IMAGE_SIZE=120000
and using the atngw_defconfig during the make config stage:
Code:
task_start "Linux kernel - make oldconfig and make"
# Update version number in Makefile
sed -e "s/EXTRAVERSION =/EXTRAVERSION = ${LINUX_ATMEL_EXTRAVERSION} #/g" \
Makefile > tmp_Makefile
mv -f tmp_Makefile Makefile
make ARCH=avr32 KBUILD_HAVE_NLS=$KBUILD_HAVE_NLS atngw_defconfig \
> make.oldconfig.out 2>&1 || task_error "See make.oldconfig.out"
Now I'm running:
Code:
./build-linux-environment.sh ../software/ ../builds/ngw/ ../mybuilds/
Will see how it fairs. Even if it succeeds, it's not going to be the same as the Atmel stock build. It really seems like a prerequisite (requirement) that whatever was used to build the factory image should be supplied on the BSP so it's possible to always go back to a baseline.
As it is with the NGW right now, there's no way to start with a baseline build. I know they supply the images, but they don't supply the mechanism to make the images. So for all intents and purposes, it's black magic and non-repeatable until the mechanism is provided (or we figure one out that works, but that doesn't seem like the point of having a BSP.) |
|
|
| |
|
|
|
|
|
Posted: Apr 26, 2007 - 05:00 PM |
|


Joined: Jan 07, 2003
Posts: 4580
Location: Oslo, Norway
|
|
|
|
|
|
|
Posted: Apr 26, 2007 - 05:13 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
Thanks for your response.
Are there plans to provide a script to build NGW images so they can be built in a consistent way for purposes of a BSP baseline?
For example, I'm still not sure if I'm using the atngw_defconfig in the correct place or building an NGW image correctly. I still don't see any Wiki page or other docs on how to modify the build-linux-environment.sh to produce an NGW image to start with.
Is there anyone who has a build-linux-environment.sh script that successfully builds the correct NGW artifacts? |
|
|
| |
|
|
|
|
|
Posted: Apr 26, 2007 - 05:32 PM |
|

Joined: Dec 18, 2006
Posts: 39
|
|
|
|
|
|
|
Posted: Apr 26, 2007 - 05:32 PM |
|


Joined: Jan 07, 2003
Posts: 4580
Location: Oslo, Norway
|
|
|
Quote:
Are there plans to provide a script to build NGW images so they can be built in a consistent way for purposes of a BSP baseline?
Yes
Quote:
For example, I'm still not sure if I'm using the atngw_defconfig in the correct place or building an NGW image correctly. I still don't see any Wiki page or other docs on how to modify the build-linux-environment.sh to produce an NGW image to start with.
For u-boot:
Code:
make atngw_config
For the Linux kernel:
Code:
make ARCH=avr32 CROSS_COMPILE=avr32-linux- atngw_defconfig
If you get an error have a look in arch/avr32/configs. |
|
|
| |
|
|
|
|
|
Posted: May 04, 2007 - 07:25 PM |
|

Joined: Dec 30, 2006
Posts: 12
|
|
Hi Landon,
First of all, thanks for documenting this process.. It has helped me (and I'm sure many others) a lot in navigating the build process in terms of differences from the STK1000.. I've successfully set up the build system on Ubuntu based on your posts and have built the basic build.. The next step is to add the atngw_defconfig, atngw_config and GPIO patches, as well as the ngw-specific name changes, but it would be helpful if I knew that this would do the trick..
It seems like you were almost there as of your last post.. Can you update us as to what has/hasn't worked since then.. Also, if you've been successful, would it be possible to post your hacked build-linux-environment.sh?
I'd be happy to turn this into a wiki entry until Atmel ships a proper ngw build script..
Thanks a million.. |
|
|
| |
|
|
|
|
|