Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

at32uc3a0: Initial work for SimpleMachines' Mizar32-A #11709

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

ramangopalan
Copy link
Contributor

Dear NuttX community, Greetings!

Summary

This is an initial working commit for the Mizar32-A platform. It is
powered by the AT32UC3A0512 microcontroller. I started with the same
Microchip Studio project I used to verify avr32dev1 (NuttX 6.0) to
also fix the build and initial functionality for Mizar32-A.

For Mizar32, I had to fix the NuttX low level abstraction layer for
the clock, the PLL0, the USART pins' alternate functions and finally,
the USART clock source.

Impact

This PR won't affect the functionality of any other target. It won't
also affect the build OR code for the existing avr32dev1 target.

Testing

I checked the NuttX build on GNU/Linux. I used dfu-programmer to
verify `nsh' on Mizar32-A. It works great! I am attaching a snip from
my hack sessions.

image

Please let me know if the PR is alright OR if there's something I have
missed. Many thanks. Have a great weekend!

arch/avr/src/at32uc3/at32uc3_gpio.c Outdated Show resolved Hide resolved
boards/Kconfig Outdated Show resolved Hide resolved
@xiaoxiang781216
Copy link
Contributor

xiaoxiang781216 commented Feb 18, 2024

@ramangopalan Please fix the following warning:

Error: /home/runner/work/nuttx/nuttx/nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c:358:2: error: C comment opening on separate line
Error: /home/runner/work/nuttx/nuttx/nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c:360:1: error: Missing blank line after comment
Warning: /home/runner/work/nuttx/nuttx/nuttx/arch/avr/src/at32uc3/chip.h:213:1: warning: #include outside of 'Included Files' section
Error: /home/runner/work/nuttx/nuttx/nuttx/boards/avr/at32uc3/mizar32a/src/avr32_buttons.c:2:1: error: Relative file path does not match actual file

to fix the ci error:

sh: 1: avr32-gcc: not found
sh: 1: avr32-gcc: not found
ERROR: avr32-gcc failed: 127
ERROR: avr32-gcc failed: 127

avr32-gcc need to be installed, please reference how avr-gcc install in:
https://github.com/apache/nuttx/blob/master/tools/ci/cibuild.sh#L125
https://github.com/apache/nuttx/blob/master/tools/ci/docker/linux/Dockerfile#L277

arch/avr/src/at32uc3/at32uc3_gpio.c Outdated Show resolved Hide resolved
arch/avr/src/at32uc3/at32uc3_lowconsole.c Outdated Show resolved Hide resolved
@ramangopalan
Copy link
Contributor Author

Dear @xiaoxiang781216, Dear @acassis, Greetings!

Many thanks for your suggestions. I have fixed them except the ones
pertaining to CI. I read the Dockerfile. It is easy to understand but I
don't have much experience with it.

Is there a way I can test the Dockerfile changes for avr32-gcc in a
sandbox before I squash my final commit? Can you please give me a hint
on this one? Can you also please check if the other changes are OK?

@xiaoxiang781216
Copy link
Contributor

xiaoxiang781216 commented Feb 18, 2024

Dear @xiaoxiang781216, Dear @acassis, Greetings!

Many thanks for your suggestions. I have fixed them except the ones pertaining to CI. I read the Dockerfile. It is easy to understand but I don't have much experience with it.

Is there a way I can test the Dockerfile changes for avr32-gcc in a sandbox before I squash my final commit? Can you please give me a hint on this one?

You can download the image from https://github.com/apache/nuttx/pkgs/container/nuttx%2Fapache-nuttx-ci-linux, and try various docker commands.

Can you also please check if the other changes are OK?

The change looks good, please squash them. But please fix the remain warning before update the pr:

Error: /home/runner/work/nuttx/nuttx/nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c:358:1: error: Missing blank line after comment

@ramangopalan
Copy link
Contributor Author

Dear @pkarashchenko,

@ramangopalan where I can find avr32-gcc published?

The 32-bit variant is at 1 and the 64-bit at 2. I have used both
of them. Currently, I use 1 to compile NuttX for both the avr32dev1
and Mizar32-A targets.

@ramangopalan
Copy link
Contributor Author

Dear All,

I just implemented this but haven't tested it yet. Do you think this
will work?

diff --git a/tools/ci/cibuild.sh b/tools/ci/cibuild.sh
index 20c2858e..317b4211 100755
--- a/tools/ci/cibuild.sh
+++ b/tools/ci/cibuild.sh
@@ -138,6 +138,20 @@ function avr-gcc-toolchain {
   command avr-gcc --version
 }
 
+function avr32-gcc-toolchain {
+  if [ ! -d "${tools}/avr32-gnu-toolchain-linux_x86" ]; then
+    cd "${tools}"
+    git clone https://github.com/ramangopalan/avr32-gnu-toolchain-linux_x86
+  fi
+
+  case ${os} in
+    Linux)
+      add_path "${tools}"/avr32-gnu-toolchain-linux_x86/bin
+      command avr32-gcc --version
+      ;;
+  esac
+}
+

I still think I am missing an entry within linux/Dockerfile. I don't
think avr32-gcc can be obtained with apt-get (like avr-gcc). So,
perhaps something like this?

diff --git a/tools/ci/docker/linux/Dockerfile b/tools/ci/docker/linux/Dockerfile
index c1a3ff85..ec35132e 100644
--- a/tools/ci/docker/linux/Dockerfile
+++ b/tools/ci/docker/linux/Dockerfile
@@ -381,6 +381,10 @@ ENV PATH="/tools/gcc-arm-none-eabi/bin:$PATH"
 COPY --from=nuttx-toolchain-arm64 /tools/gcc-aarch64-none-elf/ gcc-aarch64-none-elf/
 ENV PATH="/tools/gcc-aarch64-none-elf/bin:$PATH"
 
+# AVR32 toolchain
+COPY --from=nuttx-toolchain-avr32 /tools/avr32-gnu-toolchain-linux_x86/bin/ avr32-gnu-toolchain-linux_x86/bin/
+ENV PATH="/tools/avr32-gnu-toolchain-linux_x86/bin:$PATH"
+

Please note: I haven't tested it. But can someone please help test
OR correct it? Many thanks.

@ramangopalan
Copy link
Contributor Author

Dear NuttX Community, Greetings!

So sorry about the delay in my response. I have squashed the review
commits. Can you please check if these changes are OK? Please let me
know if there's anything else I can help with.

@xiaoxiang781216
Copy link
Contributor

Dear All,

I just implemented this but haven't tested it yet. Do you think this will work?

diff --git a/tools/ci/cibuild.sh b/tools/ci/cibuild.sh
index 20c2858e..317b4211 100755
--- a/tools/ci/cibuild.sh
+++ b/tools/ci/cibuild.sh
@@ -138,6 +138,20 @@ function avr-gcc-toolchain {
   command avr-gcc --version
 }
 
+function avr32-gcc-toolchain {
+  if [ ! -d "${tools}/avr32-gnu-toolchain-linux_x86" ]; then
+    cd "${tools}"
+    git clone https://github.com/ramangopalan/avr32-gnu-toolchain-linux_x86
+  fi
+
+  case ${os} in
+    Linux)
+      add_path "${tools}"/avr32-gnu-toolchain-linux_x86/bin
+      command avr32-gcc --version
+      ;;
+  esac
+}
+

LGTM, let ci do the final check.

I still think I am missing an entry within linux/Dockerfile. I don't think avr32-gcc can be obtained with apt-get (like avr-gcc). So, perhaps something like this?

diff --git a/tools/ci/docker/linux/Dockerfile b/tools/ci/docker/linux/Dockerfile
index c1a3ff85..ec35132e 100644
--- a/tools/ci/docker/linux/Dockerfile
+++ b/tools/ci/docker/linux/Dockerfile
@@ -381,6 +381,10 @@ ENV PATH="/tools/gcc-arm-none-eabi/bin:$PATH"
 COPY --from=nuttx-toolchain-arm64 /tools/gcc-aarch64-none-elf/ gcc-aarch64-none-elf/
 ENV PATH="/tools/gcc-aarch64-none-elf/bin:$PATH"
 
+# AVR32 toolchain
+COPY --from=nuttx-toolchain-avr32 /tools/avr32-gnu-toolchain-linux_x86/bin/ avr32-gnu-toolchain-linux_x86/bin/
+ENV PATH="/tools/avr32-gnu-toolchain-linux_x86/bin:$PATH"
+

You can try the installed tool locally with the follow command:

https://github.com/apache/nuttx/blob/master/tools/ci/docker/linux/Dockerfile#L270-L277

Please note: I haven't tested it. But can someone please help test OR correct it? Many thanks.

You need split cibuild.sh/Dockerfile change into new patch. After it get merged, ci can verify the result with this patch.

@ramangopalan
Copy link
Contributor Author

Dear @xiaoxiang781216, Dear @acassis,

Greetings! I didn't have a chance to visit the NuttX code OR rebase
it for a while. I revisited the files pertaining to AVR32 today. I
noticed a couple of file changes within tools/ci.

You need split cibuild.sh/Dockerfile change into new patch. After it
get merged, ci can verify the result with this patch.

I have just made an initial commit with AVR32 specific changes within
Dockerfile and ubuntu.sh. I just hope the CI verifies it without much
trouble.

I could be wrong; I didn't verify these changes locally. If it goes
through, I can also touch tools/ci/platforms/linux.sh to have AVR32's
recipe there. If there's a problem, I thought I can squash the fix.

Would this be OK? Please let me know if I got something wrong. Many
thanks. Jolly good weekend.

@ramangopalan
Copy link
Contributor Author

I tried pushing another commit moments ago but this problem persists:

Error: buildx failed with: ERROR: failed to solve:
nuttx-toolchain-avr32: failed to resolve source metadata for
docker.io/library/nuttx-toolchain-avr32:latest: pull access denied,
repository does not exist or may require authorization: server
message: insufficient_scope: authorization failed

Can you please give me a hint on this one? I am unable to see the full
CI logs of what is happening after git clone for AVR32 from my
repository. OR perhaps I am missing a setting on Github?

@ramangopalan
Copy link
Contributor Author

Am I missing a similar step for AVR32 within Dockerfile? I am unable
to wrap my head around this part.

# Download the latest ARM GCC toolchain prebuilt by ARM
RUN mkdir gcc-arm-none-eabi && \
  curl -s -L  "https://developer.arm.com/-/media/Files/downloads/gnu/13.2.Rel1/binrel/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi.tar.xz" \
  | tar -C gcc-arm-none-eabi --strip-components 1 -xJ

May I ask: A similar recipe exists within ubuntu.sh. i.e. to fetch a
toolchain using Git OR curl. How is that different from what is
happening in this file? I am unable to connect the dots. Can you please
give me your thoughts?

@acassis
Copy link
Contributor

acassis commented May 5, 2024

Am I missing a similar step for AVR32 within Dockerfile? I am unable to wrap my head around this part.

# Download the latest ARM GCC toolchain prebuilt by ARM
RUN mkdir gcc-arm-none-eabi && \
  curl -s -L  "https://developer.arm.com/-/media/Files/downloads/gnu/13.2.Rel1/binrel/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi.tar.xz" \
  | tar -C gcc-arm-none-eabi --strip-components 1 -xJ

May I ask: A similar recipe exists within ubuntu.sh. i.e. to fetch a toolchain using Git OR curl. How is that different from what is happening in this file? I am unable to connect the dots. Can you please give me your thoughts?

Hi @ramangopalan seems like the issue is some authorization issue (or missing folder/directory)

#4 [internal] load metadata for docker.io/library/nuttx-toolchain-avr32:latest
#4 ERROR: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

#5 [internal] load metadata for docker.io/library/ubuntu:22.04
#5 CANCELED
------
 > [internal] load metadata for docker.io/library/nuttx-toolchain-avr32:latest:
------
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
Dockerfile:385
--------------------
 383 |     
 384 |     # AVR32 toolchain
 385 | >>> COPY --from=nuttx-toolchain-avr32 /tools/avr32-gnu-toolchain-linux_x86/ avr32-gnu-toolchain-linux_x86/
 386 |     ENV PATH="/tools/avr32-gnu-toolchain-linux_x86/bin:$PATH"
 387 |     
--------------------
ERROR: failed to solve: nuttx-toolchain-avr32: failed to resolve source metadata for docker.io/library/nuttx-toolchain-avr32:latest: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
Error: buildx failed with: ERROR: failed to solve: nuttx-toolchain-avr32: failed to resolve source metadata for docker.io/library/nuttx-toolchain-avr32:latest: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

@acassis
Copy link
Contributor

acassis commented May 5, 2024

@xiaoxiang781216 any idea why is it happening?

@xiaoxiang781216
Copy link
Contributor

@ramangopalan it's better to move the docker change to the new pr since ci still use the old docker image util the patch get merged.

@@ -381,6 +381,10 @@ ENV PATH="/tools/gcc-arm-none-eabi/bin:$PATH"
COPY --from=nuttx-toolchain-arm64 /tools/gcc-aarch64-none-elf/ gcc-aarch64-none-elf/
ENV PATH="/tools/gcc-aarch64-none-elf/bin:$PATH"

# AVR32 toolchain
COPY --from=nuttx-toolchain-avr32 /tools/avr32-gnu-toolchain-linux_x86/ avr32-gnu-toolchain-linux_x86/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

where you download the toolchain?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dear @xiaoxiang781216,

where you download the toolchain?

I intend to download the toolchain from [1]. In the code, where must I
add it so CI can see it? I have added some code in [2] which clones
the toolchain. Am I missing something? Here is a snip from [2]:

avr32_gcc_toolchain() {
  add_path "${NUTTXTOOLS}"/avr32-gnu-toolchain-linux_x86/bin

  if [ ! -f "${NUTTXTOOLS}/avr32-gnu-toolchain-linux_x86/bin/avr32-gcc" ]; then
    local basefile
    basefile=avr32-gnu-toolchain-linux_x86
    cd "${NUTTXTOOLS}"
    # Download the AVR32 GCC toolchain
    git clone https://github.com/ramangopalan/${basefile}
  fi

  command avr32-gcc --version
}

References:
[1]: https://github.com/ramangopalan/avr32-gnu-toolchain-linux_x86
[2]: tools/ci/platforms/ubuntu.sh

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xiaoxiang781216 could you please help here?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants