> ## Documentation Index
> Fetch the complete documentation index at: https://docs.t3gemstone.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Geliştirme

> Ekosistem ve Geliştirme

Bu bölümde T3 Gemstone Projesinin kapsamının ne olduğu, ne gibi çalışmalar yapılabileceği,
yazılım geliştirmek için yöntemler ve ekosistemin tanıtımına yönelik bilgiler bulunmaktadır.

<Tip>
  Bölüm bitiminde aşağıdaki konularda bilgi sahibi olacaksınız.

  * Gemstone geliştirme kartının Donanım ve Yazılım çalışmalarına ait bileşenlerin neler olduğu
  * Kart üzerinde veya Ubuntu bir bilgisayar üzerinde yazılım derleme yöntemleri
  * Github repolarında bulunan projelerin neler olduğu
</Tip>

# 1. Ekosistem

Gemstone projesi tümüyle açık kaynak yazılım ve donanım bileşenlerine sahiptir. Bu; geliştirme kartının elektronik
tasarımlarını kullanarak kendi sistemlerinize göre yeniden tasarlayabileceğiniz, yazılım bileşenleri ve kodlarda
değişiklik yaparak özgürce kullanabileceğiniz anlamına gelmekte olup [Son kullanıcı lisansı](./license) bölümünde
ne gibi hususlara dikkat edilmesi gerektiği belirtilmiştir.

<Frame>
  <img className="rounded-lg" src="https://mintcdn.com/t3gemstone-754bcb96/DqBDlLDn29Knu23Y/images/o1-board/01-all-in.png?fit=max&auto=format&n=DqBDlLDn29Knu23Y&q=85&s=1f6e89331727fd5db367b2b2fd9c0715" width="1337" height="884" data-path="images/o1-board/01-all-in.png" />
</Frame>

Geliştirme kartlarının hangi projelerde kullanılabileceğini örneklemek için aşağıda bir liste verilmiştir ve
başka nelerin eklenebileceği konusunda katkılarınız beklenmektedir!

1. İnsansız hava, kara, deniz altı aracı otopilot ve yardımcı görev bilgisayarı
2. Tarımsal araçlar, akıllı ev çalışmaları, IoT, Robotik, Endüstriyel kollar.
3. Görüntü işleme ve yapay zekayı birlikte kullanan kamera sistemleri
4. Otonom robotik çalışmalar için gömülü bilgisayar
5. Komuta kontrol sistemlerinde bulunan dokunmatik paneller ve kiosk ekranları

Listede bulunan çalışmaların onlarca farklı örneği ve yeni teknoloji haberleri
[Topluluk Forumlarında](https://community.t3gemstone.org/c/blog/71) düzenli olarak yayınlanmaktadır.

### 1.1. Geliştirme Kartı / Gömülü Bilgisayar

Gemstone ürünleri ekseriyetle gömülü teknoloji çalışmalarında kullanılmakta olup çeşitli sensörler, çevresel
aygıtlarla donatılmıştır. Seriport, CanBUS, i2c, SPI, Ethernet gibi iletişim yöntemleriyle; sensör ve
kameralardan verileri aldıktan sonra işleyerek çeşitli motorların, <Tooltip tip="Actuator">eyleyicilerin</Tooltip>
kontrol edilmesi gibi projeler yapılması mümkündür.

*T3-GEM-O1* isimli geliştirme kartının donanım tasarımları (PCB vb.)
[bu adreste](https://github.com/t3gemstone/hardware) mevcuttur. Üzerindeki donanımların nasıl kullanılacağına dair
örnekler ise sonraki ([Geliştirme Kartları](./boards/o1/introduction)) bölümlerde anlatılmıştır.

<Frame>
  <img className="rounded-lg" src="https://mintcdn.com/t3gemstone-754bcb96/gZDboP1aaPWsefwK/images/o1-board/fritzing.svg?fit=max&auto=format&n=gZDboP1aaPWsefwK&q=85&s=6d470f0569a72674eaaf5455c1e2bbe7" width="1013" height="794" data-path="images/o1-board/fritzing.svg" />
</Frame>

### 1.2. İşletim Sistemi

Gemstone üzerinde GNU/Linux işletim sistemi bulunmaktadır. [Çekirdek (Kernel)](https://github.com/t3gemstone/linux),
[Önyükleyici (Bootloader/U-Boot)](https://github.com/t3gemstone/u-boot),
[Dağıtım (Distro)](https://github.com/t3gemstone/sdk/tree/main/distro), Firmware gibi bileşenleri barındırmakta
olup; sistem bir araya getirilirken [Yocto Project](https://kureansiklopedi.com/tr/detay/yocto-projesi-the-yocto-project-b9e7e) ve
[Debootstrap](https://github.com/t3gemstone/debos) gibi araçlar kullanılmıştır.

GNU/Linux dağıtımı ([Distro](https://github.com/t3gemstone/sdk/tree/main/distro)) olarak Debian, Ubuntu, Poky
kullanılmıştır. Debian veya Ubuntu kullanınımı, kart ihtiyaçlarına göre değişkenlik gösterebileceği için seçilebilir
olarak sunulmuştur.

GNU/Linux işletim sistemlerinde yazılım güncellemeleri yapılabilmesi için çeşitli paket yönetim sistemleri
kullanılmaktadır. Örneğin [Hızlı başlangıç](./quickstart#2-4-gemstone-işletim-sistemini-güncelle) bölümünde sistem
güncellemesi yapılırken Ubuntu güncellemesi örneği verilmiştir.

Benzer şekilde T3 Gemstone kartlarının özelleştirilmiş çekirdek, sürücü vb. bütün yazılımları
için [https://packages.t3gemstone.org/apt](https://packages.t3gemstone.org/apt) paket yönetim sistemi kullanılmaktadır. Güncelleme komutu
çalıştırdığınızda sunuculardan -varsa- güncel paketler yüklenmektedir.

<Tip>Gemstone için kullanılan işletim sistemi dağıtımı BeagleBoard BeagleY-AI için de kullanılabilmektedir.
GemImager uygulamasından Board olarak BeagleY-AI seçtiğiniz takdirde oluşan sdcardı BeagleY-AI kartında
kullanabilmektesiniz. Gemstone işletim sistemi dağıtımı Beagleboard'un sunmuş olduğundan daha güçlü ve
günceldir.</Tip>

Daha hızlı açılması için Linux kernelinde çeşitli özelleştirmeler ve geliştirme kartlarının barındırdığı donanımların
sürücü seçimleri için [Device Tree](/tr/faq#device-tree-nedir) değişiklikleri
[github reposunda](https://github.com/t3gemstone/linux/tree/v6.1.83-ti-rt-arm64-r67-t3-gem-o1) mevcuttur.

### 1.3. SDK (Software Development Kit / Geliştirme Kiti)

Yukarıda bahsedilen çekirdek, önyükleyici, dağıtım vb. bütün bileşenlerin, araç, paket ve yazılımların
derlenerek bir araya getirilmesi, imaj dosyaların oluşturulması için
[T3 Gemstone SDK](https://github.com/t3gemstone/sdk) kullanılmaktadır. İlgili reponun README dosyasında
nasıl kullanılacağı özet olarak belirtildiği gibi bu Dokümantasyonun [SDK](./sdk/introduction) bölümünde daha
detaylı anlatımlar yapılmıştır. SDK çalışmasında kullanılan [Devbox](https://www.jetify.com/devbox),
[Distrobox](https://github.com/89luca89/distrobox), [Debos](https://github.com/t3gemstone/debos),
[Taskfile](https://taskfile.dev/) gibi araçların her biri geniş bilgi gereksinimlerine ihtiyaç duyulan alanlar
olduğu için ilgi alanınıza göre dokümantasyon sonunda yardımcı kaynaklar verilmiştir.

### 1.4. Github Reposu

T3 Gemstone Github reposunda bulunan projelerin kullanım amaçları aşağıdaki tabloda belirtilmiştir.

<Accordion title="Tablo">
  | Proje          | Repo                                                                      | Açıklama                                                                                                                                                                                                  |
  | :------------- | :------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | SDK            | [t3gemstone/sdk](https://github.com/t3gemstone/sdk)                       | Kernel, U-Boot, Firmware, Driver, Initrd gibi bileşenleri derleyerek işletim sistemi imajı oluşturan yazılım geliştirme kitidir.                                                                          |
  | Dokümantasyon  | [t3gemstone/docs](https://github.com/t3gemstone/docs)                     | Okumakta olduğunuz bu dokümantasyonun Mintlify kaynak kodları                                                                                                                                             |
  | Yocto          | [t3gemstone/meta-gemstone](https://github.com/t3gemstone/meta-gemstone)   | Yocto projesi kodlarıdır.                                                                                                                                                                                 |
  | Linux Kernel   | [t3gemstone/linux](https://github.com/t3gemstone/linux)                   | Geliştirme kartlarında kullanılan linux kodlarıdır.                                                                                                                                                       |
  | Bootloder      | [t3gemstone/u-boot](https://github.com/t3gemstone/u-boot)                 | Geliştirme kartlarında kullanılan ön yükleyici (bootloader) kodları. Bootloader donanımın sağlık kontrollerini yaparak linux kernelini başlatan kod parçasıdır.                                           |
  | Debos          | [t3gemstone/debos](https://github.com/t3gemstone/debos)                   | Debos isimli projenin klonlanarak bir takım ilave özelliklerin eklendiği debian tabanlı dağıtım oluşturma aracıdır.                                                                                       |
  | GemImager      | [t3gemstone/gem-imager](https://github.com/t3gemstone/gem-imager)         | rpi-imager isimli projenin klonlanarak Gemstone kartlarına göre özelleştirilmiş ilave özellikler eklenmiş imaj yazma aracıdır.                                                                            |
  | Hardware       | [t3gemstone/hardware](https://github.com/t3gemstone/hardware)             | Gemstone kartlarının anakart vb. donanım bileşenlerinin PCB vb. tasarımlarıdır.                                                                                                                           |
  | Toolchains     | [t3gemstone/toolchains](https://github.com/t3gemstone/toolchains)         | C/C++ gibi projelerin farklı mimarilere göre derlenmesinde kullanılan araçtır.                                                                                                                            |
  | Package Server | [t3gemstone/package-server](https://github.com/t3gemstone/package-server) | packages.t3gemstone.org adresinde bulunan Linux APT paket yönetim sunucusu/sistemidir.                                                                                                                    |
  | noVNC          | [t3gemstone/t3-gem-vnc](https://github.com/t3gemstone/t3-gem-vnc)         | Tarayıcı üzerinden Gemstone'a uzak masaüstü bağlantısı imkanı veren yazılımdır.                                                                                                                           |
  | Ardupilot      | [t3gemstone/ardupilot](https://github.com/t3gemstone/ardupilot)           | Gemstone için uyarlanmış insanlı/insansız hava, kara ve deniz araçlarından, helikopter ve uçaklara hatta deniz araçlarına kadar akla gelebilecek her araç için kullanılabilecek bir otopilot yazılımıdır. |
  | NuttX          | [t3gemstone/nuttx](https://github.com/t3gemstone/nuttx)                   | PX4 gibi MCU barındıran donanımlarda çalışan gerçek zamanlı işletim sistemidir. İlerleyen süreçte Gemstone O1 kartlarında bulunan R5 MCU çekirdeklerinde çalışması sağlanacaktır.                         |
</Accordion>

# 2. Geliştirme

Yazılım geliştirme süreçleri iki yöntemle yapılabilmektedir. Bunların ilki doğrudan kart üzerindeki derleme araçlarını
kullanarak kart üzerinde yapılması iken ikinci yöntem Çapraz Derleme (Cross Compilation) ismi verilen ve projeleri
kendi bilgisayarınız üzerinde derleyerek karta yüklediğiniz yöntemdir. Aşağıda her iki yöntem ve avantajları
anlatılmıştır.

<Frame caption="Host (x86-64) ve Target (aarch64) kavramlarını özetleyen görsel">
  <img className="rounded-lg" noZoom src="https://mintcdn.com/t3gemstone-754bcb96/16q1fj5LQ0aqh665/images/fig1-native-vs-cross-compiling.png?fit=max&auto=format&n=16q1fj5LQ0aqh665&q=85&s=9b60719ff3cc28c28eddea37d3c7885c" width="519" height="719" data-path="images/fig1-native-vs-cross-compiling.png" />
</Frame>

### 2.1. Kart üzerinde yazılım geliştirme

Gemstone O1 geliştirme kartının üzerinde bulunan sensör, haberleşme veri hatları, kamera, yapay zeka ve network
gibi bileşenlerin nasıl kullanıldığına dair C/C++/Python örnek projeler [https://github.com/t3gemstone/examples](https://github.com/t3gemstone/examples) adresinde
mevcuttur. Aşağıda kart üzerinde bu projenin indirilerek derleme işleminin yapılması anlatılmış her bir bileşen
için ayrı ayrı açıklamalar Geliştirme kartları bölümünde izah edilmiştir.

<Tip>
  Aşağıdaki adımlar t3gemstone/examples isimli projeyi kart içerisine indirerek derleme işlemi yapıp örnekleri
  çalıştırmayı gösterir. Gemstone geliştirme kartına
  [Seri port](./quickstart.mdx#21-seriport), [SSH](./quickstart.mdx#23-ssh-ile-network-üzerinden-bağlantı) veya
  [VNC](./quickstart#2-2-vnc-ile-tarayıcıdan-uzak-masaüstü-bağlantısı) ile bağlantı kurduktan sonra işlemlerini uygulayınız.
</Tip>

#### 2.1.1. Git clone işlemi ile örnek projeleri indir

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  git clone https://github.com/t3gemstone/examples.git
  cd examples
  ```

  ```bash Output lines theme={"system"}
  gemstone@t3-gem-o1:~$ git clone https://github.com/t3gemstone/examples.git
  Cloning into 'examples'...
  remote: Enumerating objects: 637, done.
  remote: Counting objects: 100% (637/637), done.
  remote: Compressing objects: 100% (383/383), done.
  remote: Total 637 (delta 352), reused 528 (delta 243), pack-reused 0 (from 0)
  Receiving objects: 100% (637/637), 537.15 KiB | 2.37 MiB/s, done.
  Resolving deltas: 100% (352/352), done.
  gemstone@t3-gem-o1:~$ cd examples/
  gemstone@t3-gem-o1:examples$ 
  ```
</CodeGroup>

#### 2.1.2. Derleme için gerekli araçları ve kütüphaneleri kur

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  sudo apt install -y build-essential libncurses-dev libgpiod-dev
  ./setup.sh
  devbox shell
  task fetch
  ```

  ```bash Output lines theme={"system"}
  gemstone@t3-gem-o1:examples:~$ sudo apt install -y build-essential libncurses-dev libgpiod-dev
  [sudo] password for gemstone: 
  Reading package lists... Done
  Building dependency tree... Done
  Reading state information... Done
  build-essential is already the newest version (12.9ubuntu3).
  Suggested packages:
    libgpiod-doc ncurses-doc
  The following NEW packages will be installed:
    libgpiod-dev libgpiod2 libncurses-dev
  0 upgraded, 3 newly installed, 0 to remove and 7 not upgraded.
  Need to get 484 kB of archives.
  After this operation, 2.899 kB of additional disk space will be used.
  Fetched 484 kB in 0s (1.039 kB/s)       
  Selecting previously unselected package libgpiod2:arm64.
  (Reading database ... 60%
  (Reading database ... 270804 files and directories currently installed.)
  Preparing to unpack .../libgpiod2_1.6.3-1build1_arm64.deb ...
  Unpacking libgpiod2:arm64 (1.6.3-1build1) ...
  Selecting previously unselected package libgpiod-dev:arm64.
  Preparing to unpack .../libgpiod-dev_1.6.3-1build1_arm64.deb ...
  Unpacking libgpiod-dev:arm64 (1.6.3-1build1) ...
  Selecting previously unselected package libncurses-dev:arm64.
  Preparing to unpack .../libncurses-dev_6.3-2ubuntu0.1_arm64.deb ...
  Unpacking libncurses-dev:arm64 (6.3-2ubuntu0.1) ...
  Setting up libncurses-dev:arm64 (6.3-2ubuntu0.1) ...
  Setting up libgpiod2:arm64 (1.6.3-1build1) ...
  Setting up libgpiod-dev:arm64 (1.6.3-1build1) ...
  Processing triggers for man-db (2.10.2-1) ...
  Processing triggers for libc-bin (2.35-0ubuntu3.10) ...
  gemstone@t3-gem-o1:examples:~$ 
  gemstone@t3-gem-o1:examples:~$ ./setup.sh

    🚀 T3 Gemstone Board Examples

      This script downloads and installs T3 Gemstone Board's required packages 📦 for the development of examples.
      Powered by Devbox, uv, Love and Passion.

    → requirements...
    ✓ requirements... [DONE]
    → devbox...
    ✓ devbox... [DONE]

    What's the next?
      1. Learn how to build 🌍 a new world
         Read the docs at https://docs.t3gemstone.org
      2. Get help and give feedback
         Join our community at https://community.t3gemstone.org

  gemstone@t3-gem-o1:examples:~$
  gemstone@t3-gem-o1:examples:~$ devbox shell
  Info: Ensuring packages are installed.
  ✓ Computed the Devbox environment.
  Starting a devbox shell...
  Using CPython 3.12.10
  Creating virtual environment at: .venv
  Resolved 65 packages in 19ms
  Installed 59 packages in 20.55s
  📦 devbox:examples> 
  📦 devbox:examples> task fetch
  t3gemstone-toolchain  100%[=============================================================================================>] 225,19M  5,82MB/s    eta 10s    ^s/build/downloads/t3gemstone-toolchains-ubuntu-jammy.  87%[=======================================================================================================>               ] 249,76M  6,15MB/s    eta 6s     
  📦 devbox:examples> task fetch
  ```
</CodeGroup>

#### 2.1.3. Örnek bir projeyi derle

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  CROSS_COMPILE=false PROJECT=magnetometer task build
  ```

  ```bash Output lines theme={"system"}
  📦 devbox:examples> CROSS_COMPILE=false PROJECT=magnetometer task build
  task: [build] if [ "${CROSS_COMPILE}" == "true" ]; then
    pushd "/home/gemstone/examples/build/${DISTRO_BASE}-${DISTRO_SUITE}" >/dev/null && source ./env && popd >/dev/null
  fi
  make -C "${PROJECT}"
  make: Entering directory '/home/gemstone/examples/magnetometer'
  make -C c
  make[1]: Entering directory '/home/gemstone/examples/magnetometer/c'
  gcc --std=gnu11 -pedantic -Wall -Werror -Wextra -Wfloat-equal -Wno-error=unused-parameter -Wpointer-arith -Wshadow -Wswitch-enum -Wundef -Wwrite-strings -c MMC5603.c -o /home/gemstone/examples/build/examples/magnetometer/c/MMC5603.o
  gcc --std=gnu11 -pedantic -Wall -Werror -Wextra -Wfloat-equal -Wno-error=unused-parameter -Wpointer-arith -Wshadow -Wswitch-enum -Wundef -Wwrite-strings -c main.c -o /home/gemstone/examples/build/examples/magnetometer/c/main.o
  gcc --std=gnu11 -pedantic -Wall -Werror -Wextra -Wfloat-equal -Wno-error=unused-parameter -Wpointer-arith -Wshadow -Wswitch-enum -Wundef -Wwrite-strings -o /home/gemstone/examples/build/examples/magnetometer/c/magnetometer /home/gemstone/examples/build/examples/magnetometer/c/MMC5603.o /home/gemstone/examples/build/examples/magnetometer/c/main.o -lm
  make[1]: Leaving directory '/home/gemstone/examples/magnetometer/c'
  make -C cpp
  make[1]: Entering directory '/home/gemstone/examples/magnetometer/cpp'
  g++ --std=c++17 -pedantic -Wall -Weffc++ -Werror -Wextra -Wno-error=effc++ -Wno-error=unused-parameter -c MMC5603.cpp -o /home/gemstone/examples/build/examples/magnetometer/cpp/MMC5603.o
  g++ --std=c++17 -pedantic -Wall -Weffc++ -Werror -Wextra -Wno-error=effc++ -Wno-error=unused-parameter -c main.cpp -o /home/gemstone/examples/build/examples/magnetometer/cpp/main.o
  g++ --std=c++17 -pedantic -Wall -Weffc++ -Werror -Wextra -Wno-error=effc++ -Wno-error=unused-parameter -o /home/gemstone/examples/build/examples/magnetometer/cpp/magnetometer /home/gemstone/examples/build/examples/magnetometer/cpp/MMC5603.o /home/gemstone/examples/build/examples/magnetometer/cpp/main.o -lm
  make[1]: Leaving directory '/home/gemstone/examples/magnetometer/cpp'
  make -C python
  make[1]: Entering directory '/home/gemstone/examples/magnetometer/python'
  cp MMC5603.py /home/gemstone/examples/build/examples/magnetometer/python/MMC5603.py
  cp main.py /home/gemstone/examples/build/examples/magnetometer/python/main.py
  cp /home/gemstone/examples/build/examples/magnetometer/python/main.py /home/gemstone/examples/build/examples/magnetometer/python/magnetometer
  make[1]: Leaving directory '/home/gemstone/examples/magnetometer/python'
  make: Leaving directory '/home/gemstone/examples/magnetometer'

  ```
</CodeGroup>

#### 2.1.4. Derlenmiş projeyi çalıştır

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  sudo ./build/examples/magnetometer/c/magnetometer
  sudo ./build/examples/magnetometer/cpp/magnetometer
  sudo ./build/examples/magnetometer/python/magnetometer
  ```

  ```bash Output lines theme={"system"}
  📦 devbox:examples> sudo ./build/examples/magnetometer/c/magnetometer

  MMC5603 Magnetometer Test
  =========================
  ```
</CodeGroup>

### 2.2. Geliştirici bilgisayarında yazılım geliştirme

Yukarıda anlatılan şekilde projelerin kart üzerinde derlenmesi mümkünken kullanmakta olduğunuz Dizüstü, Masaüstü
bilgisayarlardaki GNU/Linux işletim sistemini kullanarak derleme yapmanın bir takım avantajları vardır. Örneğin
*T3-GEM-O1* kartı 4GB Bellek'e sahipken Dizüstü bilgisayarınız 16/32GB bellek'e ve daha gelişmiş İşlemciye sahip olabilir.
Dolayısıyla derleme işlemlerini hızlandırmak için Cross Compile Toolchains (Çarpaz Derleme Araçları) kullanılmaktadır.

<Note>
  Geliştirme kartları ekseriyetle ARM mimarili işlemcilere sahipken dizüstü, masaüstü bilgisayarlar yine ekseriyetle
  Intel x86-64 mimarili işlemcilere sahiptir. Bu durumda bir mimarili bilgisayardan başka mimarili bir cihazda çalışmak üzere derleme
  yapma imkanını sağlayan programlar Cross (Çarpaz) derleme araçlarıdır.
</Note>

#### 2.2.1. Gemstone kartını ve bilgisayarınızı Ethernet ile birbirine bağlayın

Ethernet kablosunun bir ucunu geliştirme kartınıza diğer ucunu ise bilgisayarınıza bağlayınız.
Ardından bilgisayarınıza aşağıdaki şekilde statik IP adresi ataması yapınız.

<Tabs>
  <Tab title="Windows">
    <Frame>
      <video controls className="w-full aspect-video" src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/videos/win-set-ip.mp4?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=bc082741d88ad1697c47f2cc51169f6e" data-path="videos/win-set-ip.mp4" />
    </Frame>
  </Tab>

  <Tab title="Linux">
    <Frame>
      <video controls className="w-full aspect-video" src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/videos/linux-set-ip.mp4?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=c204d28b47ba69fa50eb52460084e08d" data-path="videos/linux-set-ip.mp4" />
    </Frame>
  </Tab>

  <Tab title="macOS">
    <Frame caption="Todo: Ayarlar uygulamasından IP adresi ata">
      <img style={{height: "300px", width: "auto"}} className="rounded-lg" noZoom src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/under-construction.png?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=272252292237340bb9c15e3cfc27ebc1" width="1038" height="1002" data-path="images/under-construction.png" />
    </Frame>
  </Tab>
</Tabs>

Bilgisayarınıza statik IP adresini atadıktan sonra [seriport](./quickstart#2-1-seriport) üzerinden kartın
konsoluna erişip aşağıdaki komutları çalıştırınız. `nmcli` aracı kullanılarak yeni
statik IP bağlantısı oluşturulup bu bağlantının önceliği DHCP'den daha yüksek
olacak şekilde ayarlanacaktır. Bu sayede otomatik olarak statik IP ataması yapılacaktır.

```bash theme={"system"}
gemstone@t3-gem-o1:~$ sudo nmcli connection add \
  con-name "eth0-static" \
  ifname eth0 type ethernet \
  ip4 10.0.0.1/24 \
  connection.autoconnect yes
gemstone@t3-gem-o1:~$ sudo nmcli connection modify "eth0-static" connection.autoconnect-priority 10
gemstone@t3-gem-o1:~$ sudo nmcli connection modify "eth0-dhcp" connection.autoconnect-priority 20
```

Statik IP adresi atandıktan sonra bağlantıyı test etmek için aşağıdaki komutu çalıştırınız.
Eğer yanıt alabiliyorsanız Ethernet bağlantısı başarılıdır.

```bash theme={"system"}
gemstone@t3-gem-o1:~$ ping 10.0.0.1
```

#### 2.2.2. Git clone işlemi ile örnek projeleri indir

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  git clone https://github.com/t3gemstone/examples.git
  cd examples
  ```

  ```bash Output lines theme={"system"}
  ubuntu@host:~$ git clone https://github.com/t3gemstone/examples.git
  Cloning into 'examples'...
  remote: Enumerating objects: 637, done.
  remote: Counting objects: 100% (637/637), done.
  remote: Compressing objects: 100% (383/383), done.
  remote: Total 637 (delta 352), reused 528 (delta 243), pack-reused 0 (from 0)
  Receiving objects: 100% (637/637), 537.15 KiB | 2.37 MiB/s, done.
  Resolving deltas: 100% (352/352), done.
  ubuntu@host:~$ cd examples/
  ubuntu@host:examples$ 
  ```
</CodeGroup>

#### 2.2.3. Derleme için gerekli araçları ve toolchain'i kur

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  ./setup.sh
  devbox shell
  task fetch
  ```

  ```bash Output lines theme={"system"}
  ubuntu@host:examples:~$ ./setup.sh

    🚀 T3 Gemstone Board Examples

      This script downloads and installs T3 Gemstone Board's required packages 📦 for the development of examples.
      Powered by Devbox, uv, Love and Passion.

    → requirements...
    ✓ requirements... [DONE]
    → devbox...
    ✓ devbox... [DONE]

    What's the next?
      1. Learn how to build 🌍 a new world
         Read the docs at https://docs.t3gemstone.org
      2. Get help and give feedback
         Join our community at https://community.t3gemstone.org

  ubuntu@host:examples:~$
  ubuntu@host:examples:~$ devbox shell
  Info: Ensuring packages are installed.
  ✓ Computed the Devbox environment.
  Starting a devbox shell...
  Using CPython 3.12.10
  Creating virtual environment at: .venv
  Resolved 65 packages in 19ms
  Installed 59 packages in 20.55s
  📦 devbox:examples> 
  📦 devbox:examples> task fetch
  t3gemstone-toolchain  100%[=============================================================================================>] 225,19M  5,82MB/s    eta 10s    ^s/build/downloads/t3gemstone-toolchains-ubuntu-jammy.  87%[=======================================================================================================>               ] 249,76M  6,15MB/s    eta 6s     
  📦 devbox:examples> task fetch
  ```
</CodeGroup>

#### 2.2.4. Örnek bir projeyi toolchain'i kullanarak çapraz derle

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  CROSS_COMPILE=true PROJECT=magnetometer task build
  ```

  ```bash Output lines theme={"system"}
  📦 devbox:examples> CROSS_COMPILE=true PROJECT=magnetometer task build
  task: [build] if [ "${CROSS_COMPILE}" == "true" ]; then
    pushd "/home/ubuntu/examples/build/${DISTRO_BASE}-${DISTRO_SUITE}" >/dev/null && source ./env && popd >/dev/null
  fi
  make -C "${PROJECT}"

  ======================
  T3 Gemstone Toolchains
  ======================
  Distro=ubuntu-jammy
  Version=1.0.5
  Timestamp=2025-07-07 11:54:12Z
  make: Entering directory '/home/ubuntu/examples/magnetometer'
  make -C c
  make[1]: Entering directory '/home/ubuntu/examples/magnetometer/c'
  make[1]: '/home/ubuntu/examples/build/examples/magnetometer/c/magnetometer' is up to date.
  make[1]: Leaving directory '/home/ubuntu/examples/magnetometer/c'
  make -C cpp
  make[1]: Entering directory '/home/ubuntu/examples/magnetometer/cpp'
  make[1]: '/home/ubuntu/examples/build/examples/magnetometer/cpp/magnetometer' is up to date.
  make[1]: Leaving directory '/home/ubuntu/examples/magnetometer/cpp'
  make -C python
  make[1]: Entering directory '/home/ubuntu/examples/magnetometer/python'
  make[1]: '/home/ubuntu/examples/build/examples/magnetometer/python/magnetometer' is up to date.
  make[1]: Leaving directory '/home/ubuntu/examples/magnetometer/python'
  make: Leaving directory '/home/ubuntu/examples/magnetometer'

  ```
</CodeGroup>

#### 2.2.5. Derlenmiş projeyi geliştirme kartına yükle

```bash theme={"system"}
ubuntu@host:examples$ scp -r build/examples gemstone@10.0.0.1:build
```

#### 2.2.6. Derlenmiş projeyi çalıştır

<CodeGroup>
  ```bash Terminal lines theme={"system"}
  ubuntu@host:examples$ ssh gemstone@10.0.0.1
  gemstone@t3-gem-o1:~$ sudo /home/gemstone/build/examples/magnetometer/c/magnetometer
  ```

  ```bash Output lines theme={"system"}
  gemstone@t3-gem-o1:~$ sudo /home/gemstone/build/examples/magnetometer/c/magnetometer

  MMC5603 Magnetometer Test
  =========================
  ```
</CodeGroup>

# 3. VSCode Uzak Geliştirme (Remote Development)

Kullanmakta olduğunuz İşletim Sisteminde kurulu olan VSCode aracılığıyla Gemstone'na uzak bağlantı yaparak
geliştirme yapabilirsiniz. Bu yöntemle kendi bilgisayarınızın kaynaklarını kullanarak kod derleme
işlemlerini kart üzerinde gerçekleştirirsiniz. Kartınızın bunu desteklemesi için hızlı başlangıç bölümünde
anlatılan [Servisler](./quickstart#servisler) bölümündeki SSH seçeneğinin işaretlenerek kurulum yapılmış olması
gerekmektedir.

### 3.1. Eklentinin Kurulması

VSCode üzerinden uzak bağlantı kurabilmek için Microsoft tarafından geliştirilen "Remote - SSH" eklentisini
kurmanız gerekmektedir.

1. VSCode'u açın.
2. Sol menüdeki **Extensions** (Eklentiler) simgesine tıklayın veya `Ctrl+Shift+X` tuşlarına basın.
3. Arama çubuğuna `Remote - SSH` yazın.
4. Microsoft tarafından yayınlanan eklentiyi bulun ve **Install** (Kur) butonuna tıklayın.

<Frame caption="VSCode Remote-SSH eklentisi kurulumu">
  <video controls className="w-full rounded-lg" src="https://mintcdn.com/t3gemstone-754bcb96/gZDboP1aaPWsefwK/videos/vscode-remote-ssh-ext.mp4?fit=max&auto=format&n=gZDboP1aaPWsefwK&q=85&s=5f1326f072a2d70c053c70bbf17d44f2" data-path="videos/vscode-remote-ssh-ext.mp4" />
</Frame>

### 3.2. SSH Yapılandırması (Önerilen)

Her defasında şifre girmeden hızlıca bağlanabilmek için SSH anahtarlarınızı (SSH Keys) yapılandırmanız
tavsiye edilir.

#### 3.2.1. SSH Anahtarı Oluşturma

Bilgisayarınızın terminalinde (Linux/macOS terminali veya Windows PowerShell) aşağıdaki komutu çalıştırarak bir
anahtar çifti oluşturun:

```bash theme={"system"}
ssh-keygen -t rsa -b 4096
```

Bu komut sonrası çıkan soruları varsayılan ayarlarla (Enter tuşuna basarak) geçebilirsiniz.

#### 3.2.2. Anahtarı Karta Kopyalama

Oluşturduğunuz genel anahtarı (`public key`) Gemstone kartına transfer etmek için aşağıdaki komutu kullanın:

```bash theme={"system"}
ssh-copy-id gemstone@192.168.7.2
```

<Note>
  Gemstone'un IP adresini değiştirdiyseniz veya [statik IP](#2-2-1-gemstone-kartını-ve-bilgisayarınızı-ethernet-ile-birbirine-bağlayın)
  atadıysanız ilgili adresi giriniz.
</Note>

### 3.3. Hedef Cihaza Bağlanma

Eklentiyi kurduktan ve SSH ayarlarını tamamladıktan sonra bağlantıyı başlatabilirsiniz.

1. VSCode'un sol alt köşesinde bulunan mavi renkli **Open a Remote Window** (Uzak Pencere Aç) simgesine tıklayın.
2. Açılan menüden **Connect to Host...** seçeneğini seçin.
3. `gemstone@192.168.7.2` yazın ve `Enter` tuşuna basın.
4. Bağlantı sağlandığında, sol alt köşede **SSH: 192.168.7.2** ibaresini göreceksiniz.

### 3.4. Proje Klasörünü Açma ve Çalışma

Bağlantı başarılı olduktan sonra "File > Open Folder" yoluyla Gemstone üzerindeki bir klasörü seçerek
çalışmaya başlayabilirsiniz.

<Tip>
  Geliştirme yaparken ihtiyacınız olan **C/C++**, **Python** veya **CMake Tools** gibi eklentileri uzak cihaza
  bağlıyken tekrar kurmanız gerekebilir. Eklentiler sekmesinde "Install on SSH: 192.168.7.2" butonu ile bu
  işlemi gerçekleştirebilirsiniz.
</Tip>
