diff --git a/getting_started/index.rst b/getting_started/index.rst index a9511ef1..a932ec3a 100755 --- a/getting_started/index.rst +++ b/getting_started/index.rst @@ -21,18 +21,36 @@ current distro release is always preferred. build-guide/build-3rd-party-toolchain build-guide/build-with-zephyr -Set up SOF on hardware -********************** +Set up SOF on a Linux machine +***************************** -SOF runs on a variety of devices with varying audio capabilities so -instructions may differ between devices. +You can build the Linux kernel with the latest SOF code and install it locally or remotely with ktest. + +Do this first: + +.. toctree:: + :maxdepth: 1 + + setup_linux/prepare_build_environment + +Then proceed based on if you are installing locally or through ktest: + +.. toctree:: + :maxdepth: 1 + + setup_linux/install_locally + setup_linux/setup_ktest_environment + +Set up SOF on a special device +****************************** + +SOF also runs on the MinnowBoard Turbot and the Up Squared board with Hifiberry Dac+. .. toctree:: :maxdepth: 1 - setup/setup_minnowboard_turbot - setup/setup_up_2_board - setup/setup_ktest_environment + setup_special_device/setup_minnowboard_turbot + setup_special_device/setup_up_2_board Debug Audio issues on Intel platforms ************************************* diff --git a/getting_started/setup_linux/install_locally.rst b/getting_started/setup_linux/install_locally.rst new file mode 100644 index 00000000..f62c0594 --- /dev/null +++ b/getting_started/setup_linux/install_locally.rst @@ -0,0 +1,109 @@ +.. _install-locally: + +Install the Kernel locally +####################################### + +.. contents:: + :local: + :depth: 3 + +Introduction +************ + +Make sure you have `setup your development environment `_ before following these steps. This page will guide you through the process of installing the kernel locally on your machine. It will be installed in addition to your distro's default kernel so that you can always change back to that in case something goes wrong. If you're interested in learning more about this process there's lots of online guides available, for example `Fedora's guide `_ or `this wiki page `_. + + +Build and install the kernel +**************************** + +(You should be in the ``~/sof/linux`` directory you created on the setup page) + +1. Load base kernel configuration +--------------------------------- + +.. code-block:: bash + + # This will copy the booted kernel's configuration so that it will be used as a base + cp /boot/config-$(uname -r)* .config + + +2. Apply SOF-specific configuration +----------------------------------- + +The following scripts will update your base config so that it uses the latest SOF modules. Run only one of them depending on your needs. If it prompts you with any questions, just press to accept the default value. Note that, by default, these scripts will set the configuration to only compile modules that are currently loaded in order to lower compile times. This means that when you've booted from the custom kernel some external devices may not work if they weren't connected while running this script. If you want to compile all modules, delete the line ``make localmodconfig`` from the script you will run in this step. + +.. code-block:: bash + + # For most users + ../kconfig/kconfig-distro-sof-update.sh + # For additional logging and experimental device support + ../kconfig/kconfig-distro-sof-dev-update.sh + +3. Compile the kernel +--------------------- + +.. code-block:: bash + + # The first time you run this it can take a while (over 30 minutes on some machines), + # so grab a coffee or take an exercise break while it runs + make -j$(nproc --all) + +4. Install the kernel +--------------------- + +.. code-block:: bash + + sudo make modules_install + sudo make install + +If all went well, your freshly-built kernel will be installed and available at next boot. Restart your computer, and you should have the option to pick a kernel when it turns on. Select the kernel that has "-sof" at the end of it, and your computer should boot as normal using the kernel you just built. On Ubuntu, the kernel option may be hidden behind the "Advanced options for Ubuntu" submenu. + +5. Updating and rebuilding +-------------------------- + +If you need to try some new changes, you'll have to download the updated code and rebuild the kernel. + +If you originally cloned the repo using git, you just need to pull the changes: + +.. code-block:: bash + + git pull + # You should run this after switching branches or configuration or any other major code change + # If you just pulled some minor updates, it's likely unnecessary and will increase your build time + make clean + +Now, repeat steps 3 and 4 to rebuild and reinstall the kernel. Reboot your computer, and select the kernel with -sof at the end to test it. + +Unfortunately, if you downloaded via zip, the entire process has to be restarted from the "Get the kernel source" section; there's no good way to incrementally update. However, the kernel build should be faster now as part of it will be cached. + +.. code-block:: bash + + cd .. + # Delete the old folder before starting over + rm -rf linux + +6. Removing the kernel +---------------------- + +If you run into issues or no longer need the custom kernel, you can remove it. + +Ubuntu: + +.. code-block:: bash + + cd ~/sof/linux + sudo rm /boot/*-$(make kernelversion) + sudo rm -rf /lib/modules/$(make kernelversion) + sudo update-grub + +Fedora: + +.. code-block:: bash + + cd ~/sof/linux + sudo rm /boot/*-$(make kernelversion)* + sudo rm -rf /lib/modules/$(make kernelversion) + sudo grubby --remove-kernel=/boot/vmlinuz-$(make kernelversion) + + +After rebooting, you should be back to your old kernel with all traces of the custom kernel installation gone. If you'd like, you can also delete the ``~sof`` directory to save disk space. diff --git a/getting_started/setup_linux/prepare_build_environment.rst b/getting_started/setup_linux/prepare_build_environment.rst new file mode 100644 index 00000000..30382aa7 --- /dev/null +++ b/getting_started/setup_linux/prepare_build_environment.rst @@ -0,0 +1,102 @@ +.. _prepare-build-environment: + +Set up a development environment to build the kernel +#################################################### + +.. contents:: + :local: + :depth: 3 + +Introduction +************ + + +These instructions will help you set up a development environment for the SOF branch of the Linux kernel. If you have dedicated test hardware you can use ktest to install it over ssh, otherwise you can install it locally on your device in addition to your default kernel. + +Prerequisites +************* + +1. Device requirements +----------------------- + +**Development device:** PC running Fedora 35+ or Ubuntu 20.04+. + +**Target device:** PC running Fedora 35+ or Ubuntu 20.04+, with secure boot disabled. If the target device is different than the development device you must be able to ssh into the target, which is typically on the same local network/VPN. + +2. Create working directory +--------------------------- + +This directory can be located anywhere, simply change the ``SOF_WORKSPACE`` variable if you would like to store your sources somewhere else. + +.. code-block:: bash + + export SOF_WORKSPACE=~/work/sof + mkdir -p $SOF_WORKSPACE + cd $SOF_WORKSPACE + +3. Install kernel build dependencies +------------------------------------ + +Fedora (see `their guide `_ for details): + +.. code-block:: bash + + sudo dnf install fedpkg + fedpkg clone -a kernel + cd kernel + sudo dnf builddep kernel.spec + sudo dnf install ccache + cd .. + +Ubuntu (see `their page `_ for details): + +.. code-block:: bash + + sudo apt update + sudo apt install git libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf dwarves zstd + +4. Download the configuration scripts +------------------------------------- + +.. code-block:: bash + + git clone https://github.com/thesofproject/kconfig.git + +Get the kernel source +********************* + +There are two ways to get the kernel source. We strongly recommend using git as it makes updates **much** easier, but the zip download may be more successful if you have an unstable connection. + +Option 1: Clone with git +------------------------ +.. code-block:: bash + + # If a maintainer requests that you check out a different branch + # to test a bug fix, add -b [branch] + # to the end of this command, where [branch] is the branch name + git clone https://github.com/thesofproject/linux.git --depth=1 + cd linux + +Option 2: Download via zip +-------------------------- + +Visit the SOF Linux fork at https://github.com/thesofproject/linux. If a maintainer asks you to test a specific branch, click the dropdown with the text "topic/sof-dev" and select the branch they asked you to test. Then, click the green "Code" dropdown and select "download zip". Once it's downloaded, extract it to the directory you created in the previous step: + +.. code-block:: bash + + cd ~/Downloads + unzip linux-*.zip -d $SOF_WORKSPACE + cd $SOF_WORKSPACE + mv linux-* linux + cd linux + +Build the kernel +**************** + +Your device should now be ready to configure and build the kernel. How to proceed depends on if you are installing locally or on dedicated test hardware. + +.. toctree:: + :maxdepth: 1 + + install_locally + setup_ktest_environment \ No newline at end of file diff --git a/getting_started/setup/setup_ktest_environment.rst b/getting_started/setup_linux/setup_ktest_environment.rst similarity index 50% rename from getting_started/setup/setup_ktest_environment.rst rename to getting_started/setup_linux/setup_ktest_environment.rst index 77bc71fd..b67e6ef7 100644 --- a/getting_started/setup/setup_ktest_environment.rst +++ b/getting_started/setup_linux/setup_ktest_environment.rst @@ -11,22 +11,20 @@ Introduction ************ These instructions explain how a target device can be configured to update the kernel over SSH. The use of ktest.pl and git worktrees -allow for simultaneous configs to be tested on multiple platforms, -though only one branch can be checked out at a time. Wired Ethernet -access is assumed as wireless is unreliable. If there is no Ethernet -port, use a USB-Ethernet dongle supported in the kernel. +allow for simultaneous configs to be tested on multiple platforms. +Wired Ethernet access is assumed as wireless is unreliable. If there +is no Ethernet port, use a USB-Ethernet dongle supported in the kernel. Prerequisites on the target device ********************************** The target device can be any of the SOF-supported platforms, -e.g. MinnowBoard, Up^2, Asus T100, Chromebooks) +e.g. MinnowBoard, Up^2, Asus T100, Chromebooks. 1. Install OS on target ----------------------- -Install ubuntu or debian (fedora is possible with a minor change -in the *initrd* generation) +Install Ubuntu, Debian, or Fedora. 2. Enable root password ----------------------- @@ -44,27 +42,59 @@ Copy your existing known-to-work kernels/initrd .. code-block:: bash - cp /boot/vmlinuz-4.13.0-16-generic /boot/vmlinuz-test - cp /boot/initrd.img-4.13.0-16-generic /boot/initrd.img-test + sudo cp /boot/vmlinuz-$(uname -r) /boot/vmlinuz-test -Change the extensions as needed to create an initial grub entry -for a test kernel. You will never override the default -Ubuntu/Debian stuff, so you will always have the ability to boot a -working kernel if your changes fail to boot. + # On Ubuntu: + sudo cp /boot/initrd.img-$(uname -r) /boot/initrd.img-test -4. Edit grub default --------------------- + # On Fedora: + sudo cp /boot/initramfs-$(uname -r).img /boot/initramfs-test.img + sudo grubby --add-kernel /boot/vmlinuz-test --title=test + +4. Edit grub settings +--------------------- + +This only needs to be run on Ubuntu and Debian, Fedora has the proper settings by default. .. code-block:: bash # Use your text editor of choice. sudo emacs /etc/default/grub + # Change GRUB_DEFAULT=[n] to GRUB_DEFAULT=saved + # Then add GRUB_DISABLE_SUBMENU=y to the end and save, + # submenus confuse ktest. sudo update-grub -Add ``GRUB_DISABLE_SUBMENU=y`` to the end and save. -Sub-menus confuse ktest. +5. Set the default kernel +------------------------- + +You will never override the default +distro kernel, so you will always have the ability to boot a +working kernel if your changes cause issues. +By setting the default kernel, you can return your system to a stable +state with just a power cycle, no grub menus involved. + +On Ubuntu: + +.. code-block:: bash + + # Print your currently booted (and known-safe) option + cat /proc/cmdline + # List the grub entries + awk '/^menuentry/ { print i++, '\t', $0 }' /boot/grub/grub.cfg + # Find the entry that matches the output of the + # first command you ran, and take note of it's number + sudo grub-set-default [n] # Where [n] is that number + # This should print saved_entry=[n] + grub-editenv list + +On Fedora: + +.. code-block:: bash + + sudo grubby --set-default /boot/vmlinuz-$(uname -r) -5. Get familiar with grub-reboot +6. Get familiar with grub-reboot -------------------------------- ktest relies on grub-reboot. grub-reboot lets you try a freshly built @@ -80,11 +110,13 @@ grub-reboot works is required to fully understand ktest configuration. It's much easier to discover grub-reboot alone than when entangled with ktest. -There's a lot of grub-reboot documentation online and offline but -apparently no good and very short cheat sheet so here is one below. For +Here's a quick cheat sheet for grub-reboot on Ubuntu/Debian. For more details search the documentation of your Linux distribution. The commands below have been tested on Ubuntu 20.04; they should be nearly -identical for most Linux distributions. +identical for most Debian-derived linux distributions. + +Warning: ``update-grub`` does not care about menuentry order and will +mess up what the numbers below point to! After running update-grub, make sure the default kernel index is correct and points towards a known-safe kernel. .. code-block:: bash @@ -95,94 +127,104 @@ identical for most Linux distributions. # See which GRUB entry was booted cat /proc/cmdline - # grub-reboot requires "unharcoding" GRUB_DEFAULT - printf 'GRUB_DEFAULT=saved\n' >> /etc/default/grub - update-grub - -Warning: ``update-grub`` does not care about menuentry order and will -mess up what the numbers below point to! - -.. code-block:: bash - - # Show the currently selected menuentry + # Show the default menuentry grub-editenv list - => saved_entry=6 + #=> saved_entry=6 # Show all, numbered kernel choices without (re)booting awk '/^menuentry/ { print i++, '\t', $0 }' /boot/grub/grub.cfg - => 5 menuentry ... - => 6 menuentry 'Ubuntu, with Linux 5.4.0-53-generic' --class ubuntu ... - => 7 menuentry ... + #=> 5 menuentry ... + #=> 6 menuentry 'Ubuntu, with Linux 5.4.0-53-generic' --class ubuntu ... + #=> 7 menuentry ... # Attempt to boot menuentry 4 only once - grub-reboot 4; grub-editenv list - => saved_entry=6 - => next_entry=4 + grub-reboot 4 + # Run this to see the updated settings + grub-editenv list + #=> saved_entry=6 + #=> next_entry=4 reboot # Switch to menuentry number 4 as the new "safe" kernel - grub-set-default 4; grub-editenv list - => saved_entry=4 + grub-set-default 4 Fedora and derived distributions have a more elaborate system to manage "installed" kernels. Instead of extracting ``menuentry`` lines from ``/boot/grub/grub.cfg`` with the ``awk`` command above, to list all -installed kernels use: ``grubby --info=ALL``. - -After copying it to ``/boot``/, "install" a new kernel with: -``grubby --add-kernel /boot/vmlinuz-softest --title=softest``. Check -``grubby``'s documentation for more details. +installed kernels use ``grubby --info=ALL``. +Check ``grubby``'s documentation for more details. +To boot a different kernel just once, use ``grub2-reboot [n]``, where ``[n]`` is the index of the menu entry you'd like to boot. 6. Install openssh-server ------------------------- .. code-block:: bash + # On Ubuntu, you need to install it sudo apt-get install openssh-server + + #On Fedora, you just need to enable it + sudo systemctl enable sshd + + # On either system, you'll need to update the config # Use your editor of choice. sudo emacs /etc/ssh/sshd_config -Replace ``PermitRootLogin without-password`` with ``PermitRootLogin yes`` -and save. +Replace ``#PermitRootLogin prohibit-password`` with ``PermitRootLogin yes`` +(make sure to remove the ``#``) and save. This is just temporary, you'll change this back once you've copied over your ssh key. -7. reboot target +7. Reboot target ---------------- +Make sure it boots automatically to your safe kernel. It's also recommended to test using grub-reboot to boot the test kernel, then rebooting again to make sure it goes back to the safe kernel. + Configure SSH without password ****************************** 1. Check SSH connection ----------------------- +You must be able to ssh into the target device, which is typically on the same local network/VPN. Run ``ip addr`` on the target to get its IP address. All other commands should be run on your dev machine, unless specified otherwise. + .. code-block:: bash - ssh root@ + # Make sure that you can connect and login to the target + ssh root@ 2. Generate an SSH key for the target ------------------------------------- +If you already have an ssh key you'd prefer to use, you can skip this step. + .. code-block:: bash - cd ~/.ssh - ssh-keygen -f sshktest - # Enter a 5+ character passphrase. + ssh-keygen -f ~/.ssh/sshktest + # This will prompt you for the target's root password. ssh-copy-id -i ~/.ssh/sshktest root@ - # This will prompt you for the root password. 3. Test the key --------------- .. code-block:: bash - ssh -i ~/.ssh/sshktest root@ - # Ubuntu unlocks the key so the -i option is not necessary. + ssh root@ + +.. note:: + + In most cases `ssh-agent` should automatically manage your password(s) and key(s). If you are still prompted for a password, it's likely your distro hasn't configured `ssh-agent`. You can either figure out how to enable it, or you can manually update your config. + To do this, put the following in ``~/.ssh/config`` (make sure to update ````) and then use ``ktest-target`` instead of the actual target's IP for ssh connections (ie ``ssh root@ktest-target``). + + .. code-block:: text + + Host ktest-target + HostName + IdentityFile ~/.ssh/sshktest 4. Disable root access ---------------------- - -Disable the root password on the target device if you -are concerned about access control. +Run this on the target device to disable root password, +you won't need it now that you've copied the key. .. code-block:: bash @@ -191,67 +233,33 @@ are concerned about access control. Replace ``PermitRootLogin yes`` by ``PermitRootLogin without-password``, save, and exit. -Create a linux development environment -************************************** - -1. Create a main working GIT tree ---------------------------------- - -.. code-block:: bash +Build and install the kernel with ktest +*************************************** - git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux-ref.git - cd linux-ref.git +Follow the `prepare build environment `_ instructions before proceeding. -2. Add a set of useful remotes ------------------------------- +1. Prepare ktest environment +---------------------------- -The SOF contributions can be handled by different maintainers, so it's useful to point directly -to maintainer trees. +If you're running this in a different terminal than you used for the prepare build environment page, you will need to re-set the SOF_WORKSPACE variable by running ``export SOF_WORKSPACE = ~/work/sof``. .. code-block:: bash - git remote add sof https://github.com/thesofproject/linux.git - git remote add takashi git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git - git remote add broonie git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git - git remote add vinod git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/sound.git - git fetch sof - git fetch takashi - git fetch broonie - git fetch vinod - -All of these branches will be accessible and can be updated from any -worktree. Clone once and use fetch to update the main working tree. - -3. Create a worktree for SOF in ~/ktest ---------------------------------------- - -.. note:: - Change the location of your ktest directory and which branch you use - as needed. - -.. code-block:: bash - - git worktree add ~/ktest/sof-dev sof/topic/sof-dev - -4. Set-up worktree ------------------- - -.. code-block:: bash - - cd ~/ktest/sof-dev + cd $SOF_WORKSPACE mkdir sof-dev-build mkfifo sof-dev-cat - cp sof-dev/tools/testing/ktest/ktest.pl . + cp linux/tools/testing/ktest/ktest.pl . -5. Save your kernel config as ~/ktest/sof-dev-defconfig -------------------------------------------------------- +2. Save your kernel config as sof-dev-defconfig +----------------------------------------------- If you don't know what options are needed, you can start using configurations maintained by SOF developers. .. code-block:: bash - git clone https://github.com/thesofproject/kconfig.git - cd sof-dev + cd linux + make O=../sof-dev-build olddefconfig + echo test > ../sof-dev-build/localversion bash ../kconfig/kconfig-sof-default.sh cp .config ../sof-dev-defconfig make mrproper @@ -264,16 +272,12 @@ If you don't know what options are needed, you can start using configurations ma .. note:: - SOF developers and the Intel CI also use "kconfig-sof-nocodec.sh" on Up2 and UpExtreme boards. - -.. note:: - - Distributions should not use the options provided in kconfig/sof-dev-defconfig + The options provided in kconfig/sof-dev-defconfig should not be used for a distro's production kernel. -6. Edit ktest configuration as needed +3. Edit ktest configuration as needed ------------------------------------- -Save the following in sof-dev.conf. +Save the following in ``sof-dev.conf``. Make sure to update the ``MACHINE=`` line with your target device's IP (or ``ktest-target`` if you had to do the additional ssh config). .. code-block:: perl @@ -285,7 +289,7 @@ Save the following in sof-dev.conf. SSH_USER = root THIS_DIR := ${PWD} # BUILD_DIR is the source directory - BUILD_DIR = ${THIS_DIR}/sof-dev + BUILD_DIR = ${THIS_DIR}/linux # OUTPUT_DIR is the actual build directory OUTPUT_DIR = ${THIS_DIR}/sof-dev-build BUILD_TARGET = arch/x86/boot/bzImage @@ -303,7 +307,7 @@ Save the following in sof-dev.conf. CONSOLE = cat ${THIS_DIR}/sof-dev-cat POWER_CYCLE = echo Power cycle the machine now and press ENTER; read a #set below to help ssh connection to close after sending reboot command - REBOOT = ssh -o 'ProxyCommand none' $SSH_USER@$MACHINE 'sudo reboot > /dev/null &' + REBOOT = ssh $SSH_USER@$MACHINE 'sudo reboot > /dev/null &' # This how ktest finds which menuentry number to pass to grub-reboot GRUB_FILE = /boot/grub/grub.cfg @@ -319,7 +323,7 @@ Save the following in sof-dev.conf. # mkinitramfs -o initrdfile 5.10.0-rc5test+ # ktest finds the real KERNEL_VERSION thanks to "make O=${OUTPUT_DIR} # kernelrelease" - POST_INSTALL = ssh -o 'ProxyCommand none' $SSH_USER@$MACHINE sudo /usr/sbin/mkinitramfs -o /boot/initrd.img-${LOCALVERSION} $KERNEL_VERSION + POST_INSTALL = ssh $SSH_USER@$MACHINE sudo /usr/sbin/mkinitramfs -o /boot/initrd.img-${LOCALVERSION} $KERNEL_VERSION #REBOOT_TYPE = script #REBOOT_SCRIPT = ssh $SSH_USER@$MACHINE "sed -i 's|^default.*$|default test|' /boot/loader/loader.conf" @@ -331,20 +335,24 @@ Save the following in sof-dev.conf. BUILD_NOCLEAN = 1 -For Fedora and derived distributions, make the following changes: +For targets running Fedora and derived distributions, make the following changes: .. code-block:: perl - GRUB_MENU = "title" of the kernel entry as displayed by: 'grubby --info=ALL' + # GRUB_MENU should be the title of the custom kernel entry you added, + # which will match LOCALVERSION ("test") if you followed the previous steps + # You can view all your kernel entries with `grubby --info=ALL` + GRUB_MENU = ${LOCALVERSION} GRUB_REBOOT = grub2-reboot REBOOT_TYPE = grub2bls - POST_INSTALL = ssh -o 'ProxyCommand none' $SSH_USER@$MACHINE sudo dracut --hostonly --force --kver ${LOCALVERSION} + POST_INSTALL = ssh $SSH_USER@$MACHINE sudo dracut --hostonly --force /boot/initramfs-${LOCALVERSION}.img $KERNEL_VERSION -7. Build and test +4. Build and test ----------------- .. code-block:: bash + # This can take a while, so don't kill it if it appears to freeze ./ktest.pl sof-dev.conf If this does not work, make sure you have all the following files in the @@ -352,29 +360,31 @@ local directory: * ktest.pl * sof-dev-cat -* sof-dev +* linux * sof-dev-build * sof-dev.conf * sof-dev-defconfig -Ktest will compile, install the new kernel, and reboot. Prompt -detection only works with a UART, not over SSH, so you will have to -``Control-C`` manually when the console is not enabled. +Ktest will compile and install the new kernel, then reboot the target device. Check which kernel is booted by running ``uname -r`` on the target. + +.. note:: + + KTest expects a UART connection to verify that the boot was successful. If you do not have a UART connection you will get some errors at the end of the ``ktest.pl`` script's execution, but you can ignore them as long as the custom kernel was installed and booted on the target device. -8. Enjoy! +5. Enjoy! --------- -9. Enjoy even more! +6. Enjoy even more! ------------------- -By having multiple worktrees and configs, you can run tests in parallel +By having multiple `Git worktrees `_ and configs, you can run tests in parallel on different machines on the same kernel or different branches. -10. Clean up /lib/modules +7. Clean up /lib/modules ------------------------- Ktest creates a separate module directory per kernel version. -User needs to clean up old module directory periodically. +User needs to clean up old module directory periodically on the target device. .. code-block:: bash diff --git a/getting_started/setup/images/minnow_turbot.png b/getting_started/setup_special_device/images/minnow_turbot.png similarity index 100% rename from getting_started/setup/images/minnow_turbot.png rename to getting_started/setup_special_device/images/minnow_turbot.png diff --git a/getting_started/setup/setup_minnowboard_turbot.rst b/getting_started/setup_special_device/setup_minnowboard_turbot.rst similarity index 100% rename from getting_started/setup/setup_minnowboard_turbot.rst rename to getting_started/setup_special_device/setup_minnowboard_turbot.rst diff --git a/getting_started/setup/setup_up_2_board.rst b/getting_started/setup_special_device/setup_up_2_board.rst similarity index 100% rename from getting_started/setup/setup_up_2_board.rst rename to getting_started/setup_special_device/setup_up_2_board.rst