quickstart-lite-steps-hi3516-running.md 15.5 KB
Newer Older
D
duangavin123 已提交
1
# Running a Hello OHOS Program<a name="EN-US_TOPIC_0000001174270695"></a>
W
wenjun 已提交
2

M
mamingshuai 已提交
3
-   [Creating a Program](#section204672145202)
Y
yangni 已提交
4
-   [Building](#section1077671315253)
M
mamingshuai 已提交
5
-   [Burning](#section1347011412201)
D
duangavin123 已提交
6 7
    -   [Programming Flash Memory Through the Network Port](#section1935410617363)

M
mamingshuai 已提交
8
-   [Running an Image](#section24721014162010)
[
[yang] 已提交
9 10
-   [Running a Program](#section5276734182615)

N
NEEN 已提交
11
This section describes how to create, compile, burn, and run the first program, and finally print  **Hello OHOS!**  on the develop board.
W
wenjun 已提交
12

M
mamingshuai 已提交
13
## Creating a Program<a name="section204672145202"></a>
W
wenjun 已提交
14

N
NEEN 已提交
15
1.  Create a directory and the program source code.
W
wenjun 已提交
16

N
NEEN 已提交
17
    Create the  **applications/sample/camera/apps/src/helloworld.c**  directory and file whose code is shown in the following example. You can customize the content to be printed. For example, you can change  **OHOS**  to  **World**. You can use either C or C++ to develop a program.
W
wenjun 已提交
18

N
NEEN 已提交
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
    ```
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        printf("\n************************************************\n");
        printf("\n\t\tHello OHOS!\n");
        printf("\n************************************************\n\n");
    
        return 0;
    }
    ```

2.  Create a build file.

    Create the  **applications/sample/camera/apps/BUILD.gn**  file. The file content is as follows:

    ```
    import("//build/lite/config/component/lite_component.gni")
    lite_component("hello-OHOS") {
      features = [ ":helloworld" ]
    }
    executable("helloworld") {
      output_name = "helloworld"
      sources = [ "src/helloworld.c" ]
      include_dirs = []
      defines = []
      cflags_c = []
      ldflags = []
    }
    ```

3.  Add a new component.

    Add the configuration of the  **hello\_world\_app**  component to the  **build/lite/components/applications.json**  file. The sample code below shows some configurations defined in the  **applications.json**  file, and the code between  **\#\#start\#\#**  and  **\#\#end\#\#**  is the new configuration \(Delete the rows where  **\#\#start\#\#**  and  **\#\#end\#\#**  are located after the configurations are added.\)

    ```
    {
      "components": [
        {
          "component": "camera_sample_communication",
          "description": "Communication related samples.",
          "optional": "true",
          "dirs": [
            "applications/sample/camera/communication"
          ],
          "targets": [
            "//applications/sample/camera/communication:sample"
          ],
          "rom": "",
          "ram": "",
          "output": [],
          "adapted_kernel": [ "liteos_a" ],
          "features": [],
          "deps": {
            "components": [],
            "third_party": []
          }
        },
    ##start##
        {
          "component": "hello_world_app",
          "description": "Communication related samples.",
          "optional": "true",
          "dirs": [
            "applications/sample/camera/apps"
          ],
          "targets": [
            "//applications/sample/camera/apps:hello-OHOS"
          ],
          "rom": "",
          "ram": "",
          "output": [],
          "adapted_kernel": [ "liteos_a" ],
          "features": [],
          "deps": {
            "components": [],
            "third_party": []
          }
        },
    ##end##
        {
          "component": "camera_sample_app",
          "description": "Camera related samples.",
          "optional": "true",
          "dirs": [
            "applications/sample/camera/launcher",
            "applications/sample/camera/cameraApp",
            "applications/sample/camera/setting",
            "applications/sample/camera/gallery",
            "applications/sample/camera/media"
          ],
    ```

4.  Modify the board configuration file.

    Add the  **hello\_world\_app**  component to the  **vendor/hisilicon/hispark\_taurus/config.json**  file. The sample code below shows the configurations of the  **applications**  subsystem, and the code between  **\#\#start\#\#**  and  **\#\#end\#\#**  is the new configuration \(Delete the rows where  **\#\#start\#\#**  and  **\#\#end\#\#**  are located after the configurations are added.\)

    ```
          {
            "subsystem": "applications",
            "components": [
              { "component": "camera_sample_app", "features":[] },
              { "component": "camera_sample_ai", "features":[] },
    ##start##
              { "component": "hello_world_app", "features":[] },
    ##end##
              { "component": "camera_screensaver_app", "features":[] }
            ]
          },
    ```
W
wenjun 已提交
130 131


Y
yangni 已提交
132
## Building<a name="section1077671315253"></a>
W
wenjun 已提交
133

D
duangavin123 已提交
134
If the Linux environment is installed using Docker, perform the building by referring to  [Using Docker to Prepare the Build Environment](../get-code/gettools-acquire.md#section107932281315). If the Linux environment is installed using a software package, go to the root directory of the source code and run the following commands for source code compilation:
W
wenjun 已提交
135 136

```
N
NEEN 已提交
137 138 139 140
hb set (Set the building path.)
. (Select the current path.)
Select ipcamera_hispark_taurus@hisilicon and press Enter.
hb build -f (Start building.)
W
wenjun 已提交
141 142
```

D
duangavin123 已提交
143
**Figure  1**  Settings<a name="fig1458988766"></a>  
D
duangavin123 已提交
144
![](figure/settings.png "settings")
N
NEEN 已提交
145 146 147

The result files are generated in the  **out/hispark\_taurus/ipcamera\_hispark\_taurus**  directory.

D
duangavin123 已提交
148
>![](../public_sys-resources/icon-notice.gif) **NOTICE:** 
D
duangavin123 已提交
149
>The U-Boot file of the Hi3516D V300 development board can be obtained from the following path: device/hisilicon/hispark\_taurus/sdk\_liteos/uboot/out/boot/u-boot-hi3516dv300.bin
Y
yangni 已提交
150

M
mamingshuai 已提交
151
## Burning<a name="section1347011412201"></a>
W
wenjun 已提交
152

[
[yang] 已提交
153
The Hi3516 development board allows you to burn flash memory over the USB port, serial port, or network port. The following uses the network port burning as an example.
W
wenjun 已提交
154

D
duangavin123 已提交
155 156 157 158 159
### Programming Flash Memory Through the Network Port<a name="section1935410617363"></a>

To program flash memory through the network port in the Windows or Linux environment:

1.  Connect the PC and the target development board through the serial port, network port, and power port. For details, see  [Introduction to the Hi3516 Development Board](https://device.harmonyos.com/en/docs/start/introduce/oem_minitinier_des_3516-0000001152041033).
N
NEEN 已提交
160
2.  <a name="en-us_topic_0000001056443961_li142386399535"></a>Open Device Manager, then check and record the serial port number corresponding to the development board.
W
wenjun 已提交
161

D
duangavin123 已提交
162
    >![](../public_sys-resources/icon-note.gif) **NOTE:** 
[
[yang] 已提交
163
    >If the serial port number is not displayed correctly, follow the steps described in  [Installing the Serial Port Driver on the Hi3516 or Hi3518 Series Development Boards](https://device.harmonyos.com/en/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695).
W
wenjun 已提交
164

D
duangavin123 已提交
165
    ![](figure/record-the-serial-port-number-1.png)
N
NEEN 已提交
166 167 168

3.  Open DevEco Device Tool and go to  **Projects**  \>  **Settings**.

D
duangavin123 已提交
169
    ![](figure/settings-2.png)
N
NEEN 已提交
170

M
mamingshuai 已提交
171
4.  On the  **Partition Configuration**  tab page, modify the settings. In general cases, you can leave the fields at their default settings.
D
duangavin123 已提交
172
5.  On the  **hi3516dv300**  tab page, configure the programming options.
N
NEEN 已提交
173

D
duangavin123 已提交
174
    -   **upload\_port**: Select the serial port number obtained in step  [2](#en-us_topic_0000001056443961_li142386399535).
N
NEEN 已提交
175 176 177
    -   **upload\_protocol**: Select the programming protocol  **hiburn-net**.
    -   **upload\_partitions**: Select the file to be programmed. By default, the  **fastboot**,  **kernel**,  **rootfs**, and  **userfs**  files are programmed at the same time.

D
duangavin123 已提交
178
    ![](figure/hi3516-upload-options.png)
N
NEEN 已提交
179

M
mamingshuai 已提交
180 181
6.  <a name="en-us_topic_0000001056443961_li1558813168234"></a>Check and set the IP address of the network adapter connected to the development board. For details, see  [Setting the IP Address of the Network Port for Programming on Hi3516](https://device.harmonyos.com/en/docs/ide/user-guides/set_ipaddress-0000001141825075).
7.  Set the IP address of the network port for programming:
N
NEEN 已提交
182

D
duangavin123 已提交
183 184 185 186
    -   **upload\_net\_server\_ip**: Select the IP address set in step  [6](#en-us_topic_0000001056443961_li1558813168234), such as 192.168.1.2.
    -   **upload\_net\_client\_mask**: Set the subnet mask of the development board, such as 255.255.255.0. Once the  **upload\_net\_server\_ip**  field is set, this field will be automatically populated.
    -   **upload\_net\_client\_gw**: Set the gateway of the development board, such as 192.168.1.1. Once the  **upload\_net\_server\_ip**  field is set, this field will be automatically populated. 
    -   **upload\_net\_client\_ip**: Set the IP address of the development board, such as 192.168.1.3. Once the  **upload\_net\_server\_ip**  field is set, this field will be automatically populated. 
N
NEEN 已提交
187

D
duangavin123 已提交
188
    ![](figure/ip-address-information.png)
N
NEEN 已提交
189

N
NEEN 已提交
190
8.  When you finish modifying, click  **Save**  in the upper right corner.
D
duangavin123 已提交
191
9.  Open the project file and go to  ![](figure/deveco-device-tool-logo.png)  \>  **PROJECT TASKS**  \>  **hi3516dv300**  \>  **Upload**  to start programming.
N
NEEN 已提交
192

D
duangavin123 已提交
193
    ![](figure/start-burning.png)
N
NEEN 已提交
194

N
NEEN 已提交
195
10. When the following message is displayed, power off the development board and then power it on.
N
NEEN 已提交
196

D
duangavin123 已提交
197
    ![](figure/restart-the-development-board-3.png)
N
NEEN 已提交
198

D
duangavin123 已提交
199
11. Start programming. If the following message is displayed, it indicates that the programming is successful.
N
NEEN 已提交
200

D
duangavin123 已提交
201
    ![](figure/burning-succeeded-4.png)
N
NEEN 已提交
202

W
wenjun 已提交
203

M
mamingshuai 已提交
204
## Running an Image<a name="section24721014162010"></a>
W
wenjun 已提交
205 206 207

1.  Connect to a serial port.

D
duangavin123 已提交
208
    >![](../public_sys-resources/icon-notice.gif) **NOTICE:** 
D
duangavin123 已提交
209
    >If the connection fails, rectify the fault by referring to  [FAQs](quickstart-lite-steps-hi3516-faqs.md).
N
NEEN 已提交
210

D
duangavin123 已提交
211 212
    **Figure  2**  Serial port connection<a name="fig139171488431"></a>  
    ![](figure/serial-port-connection.png "serial-port-connection")
W
wenjun 已提交
213

N
NEEN 已提交
214 215
    1.  Click  **Monitor**  to enable the serial port.
    2.  Press  **Enter**  repeatedly until  **hisilicon**  displays.
[
[yang] 已提交
216
    3.  Go to step  [2](#l5b42e79a33ea4d35982b78a22913b0b1)  if the board is started for the first time or the startup parameters need to be modified; go to step  [3](#ld26f18828aa44c36bfa36be150e60e49)  otherwise.
W
wenjun 已提交
217

D
duangavin123 已提交
218
2.  <a name="l5b42e79a33ea4d35982b78a22913b0b1"></a>\(Mandatory when the board is started for the first time\) Modify the bootcmd and bootargs parameters of U-Boot. You need to perform this step only once if the parameters need not to be modified during the operation. The board automatically starts after it is reset.
W
wenjun 已提交
219

D
duangavin123 已提交
220
    >![](../public_sys-resources/icon-notice.gif) **NOTICE:** 
D
duangavin123 已提交
221
    >The default waiting time in the U-Boot is 2s. You can press  **Enter**  to interrupt the waiting and run the  **reset**  command to restart the system after "hisilicon" is displayed.
W
wenjun 已提交
222

D
duangavin123 已提交
223
    **Table  1**  Parameters of the U-Boot
W
wenjun 已提交
224

N
NEEN 已提交
225 226
    <a name="table1323441103813"></a>
    <table><thead align="left"><tr id="row1423410183818"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p623461163818"><a name="p623461163818"></a><a name="p623461163818"></a>Command</p>
W
wenjun 已提交
227
    </th>
N
NEEN 已提交
228 229 230 231 232 233
    <th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p42341014388"><a name="p42341014388"></a><a name="p42341014388"></a>Description</p>
    </th>
    </tr>
    </thead>
    <tbody><tr id="row1623471113817"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p102341719385"><a name="p102341719385"></a><a name="p102341719385"></a>setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x4800; go 0x80000000";</p>
    </td>
[
[yang] 已提交
234
    <td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p92347120389"><a name="p92347120389"></a><a name="p92347120389"></a>Run this command to read content that has a size of 0x4800 (9 MB) and a start address of 0x800 (1 MB) to the memory address 0x80000000. The file size must be the same as that of the <strong id="b9140538191313"><a name="b9140538191313"></a><a name="b9140538191313"></a>OHOS_Image.bin</strong> file in the IDE.</p>
W
wenjun 已提交
235 236
    </td>
    </tr>
M
mamingshuai 已提交
237
    <tr id="row12234912381"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p172306219392"><a name="p172306219392"></a><a name="p172306219392"></a>setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=20M rw";</p>
N
NEEN 已提交
238 239
    </td>
    <td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p13489329396"><a name="p13489329396"></a><a name="p13489329396"></a>Run this command to set the output mode to serial port output, baud rate to <strong id="b1378372812210"><a name="b1378372812210"></a><a name="b1378372812210"></a>115200</strong>, data bit to <strong id="b27871628822"><a name="b27871628822"></a><a name="b27871628822"></a>8</strong>, <strong id="b678811281528"><a name="b678811281528"></a><a name="b678811281528"></a>rootfs</strong> to be mounted to the <strong id="b978813281220"><a name="b978813281220"></a><a name="b978813281220"></a>emmc</strong> component, and file system type to <strong id="b12788132814217"><a name="b12788132814217"></a><a name="b12788132814217"></a>vfat</strong>.</p>
D
duanxichao 已提交
240
    <p id="p12481832163913"><a name="p12481832163913"></a><a name="p12481832163913"></a><strong id="b965011165313"><a name="b965011165313"></a><a name="b965011165313"></a>rootaddr=10M rootsize=20M rw</strong> indicates the start address and size of the <strong id="b1538675832018"><a name="b1538675832018"></a><a name="b1538675832018"></a>rootfs.img</strong> file to be burnt, respectively. The file size <strong id="b0633135515546"><a name="b0633135515546"></a><a name="b0633135515546"></a>must be the same</strong> as that of the <strong id="b69061726113015"><a name="b69061726113015"></a><a name="b69061726113015"></a>rootfs.img</strong> file in the IDE.</p>
N
NEEN 已提交
241 242 243 244 245 246 247 248 249 250
    </td>
    </tr>
    <tr id="row18234161153820"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p823417118386"><a name="p823417118386"></a><a name="p823417118386"></a>saveenv</p>
    </td>
    <td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p32341616389"><a name="p32341616389"></a><a name="p32341616389"></a><strong id="b16238195319315"><a name="b16238195319315"></a><a name="b16238195319315"></a>saveenv</strong> means to save the current configuration.</p>
    </td>
    </tr>
    <tr id="row192345113811"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p7235111183819"><a name="p7235111183819"></a><a name="p7235111183819"></a>reset</p>
    </td>
    <td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p123781411114016"><a name="p123781411114016"></a><a name="p123781411114016"></a><strong id="b32719232420"><a name="b32719232420"></a><a name="b32719232420"></a>reset</strong> means to reset the board.</p>
W
wenjun 已提交
251 252 253 254 255
    </td>
    </tr>
    </tbody>
    </table>

D
duangavin123 已提交
256
    >![](../public_sys-resources/icon-notice.gif) **NOTICE:** 
D
duangavin123 已提交
257
    >**go 0x80000000**  \(optional\) indicates that the command is fixed in the startup parameters by default and the board automatically starts after it is reset. If you want to manually start the board, press  **Enter**  in the countdown phase of the U-Boot startup to interrupt the automatic startup.
N
NEEN 已提交
258

[
[yang] 已提交
259
3.  <a name="ld26f18828aa44c36bfa36be150e60e49"></a>Run the  **reset**  command and press  **Enter**  to restart the board. After the board is restarted,  **OHOS**  is displayed when you press  **Enter**.
W
wenjun 已提交
260

D
duangavin123 已提交
261 262
    **Figure  3**  System startup<a name="fig784813366444"></a>  
    ![](figure/system-startup.png "system-startup")
W
wenjun 已提交
263 264


N
NEEN 已提交
265
## Running a Program<a name="section5276734182615"></a>
W
wenjun 已提交
266

N
NEEN 已提交
267
In the root directory, run the  **./bin/helloworld**  command to operate the demo program. The compilation result is shown in the following example.
W
wenjun 已提交
268

D
duangavin123 已提交
269
**Figure  4**  Successful system startup and program execution<a name="fig149821431194515"></a>  
D
duangavin123 已提交
270
![](figure/successful-system-startup-and-program-execution.png "successful-system-startup-and-program-execution")
W
wenjun 已提交
271